@@ -104,11 +104,13 @@ static void drlink_delete(drlink_data **drldata, unsigned int loc)
104
104
}
105
105
106
106
if (drlp -> next == * drldata && loc == 0 ) { // head 0 0
107
+ printf ("0\n" );
107
108
free (drlp );
108
109
* drldata = NULL ;
109
110
return ;
110
111
}
111
112
if (loc == 0 ) { //head 0... 1 1
113
+ printf ("1\n" );
112
114
temp = drlp -> prev ;
113
115
temp -> next = drlp -> next ;
114
116
drlp -> next -> prev = temp ;
@@ -149,6 +151,41 @@ static void drlink_amend(drlink_data *drldata, unsigned int loc, char data)
149
151
drlp -> data = data ;
150
152
}
151
153
154
+ static int drlink_select (drlink_data * drldata , char data )
155
+ {
156
+ int i = 0 ;
157
+ drlink_data * drlp = drldata ;
158
+ if (!drlp ) {
159
+ printf ("drlink is not exsit\n" );
160
+ return ;
161
+ }
162
+
163
+ do {
164
+ if (drlp -> data == data ) {
165
+ return i ;
166
+ }
167
+ drlp = drlp -> next ;
168
+ i ++ ;
169
+ }while (drlp != drldata );
170
+
171
+ return -1 ;
172
+ }
173
+
174
+ static void drlink_destroy (drlink_data * * drldata )
175
+ {
176
+ drlink_data * drlp = * drldata ;
177
+ drlink_data * temp ;
178
+ if (!drlp ) {
179
+ printf ("drlink is not exsit\n" );
180
+ return ;
181
+ }
182
+
183
+ do {
184
+ drlink_delete (drldata , 0 );
185
+ printf ("2\n" );
186
+ }while (!(* drldata ));
187
+ }
188
+
152
189
int main ()
153
190
{
154
191
drlink_data * drldata ;
@@ -183,10 +220,17 @@ int main()
183
220
drlink_show (drldata );
184
221
drlink_amend (drldata , 2 , 'y' );
185
222
drlink_show (drldata );
186
- #if 0
187
- drlink_select ();
188
- drlink_destroy ();
189
- #endif
223
+
224
+ int loc ;
225
+ loc = drlink_select (drldata , 'u' );
226
+ printf ("select 'u' in loc %d\n" , loc );
227
+ loc = drlink_select (drldata , 'p' );
228
+ printf ("select 'p' in loc %d\n" , loc );
229
+ loc = drlink_select (drldata , 'g' );
230
+ printf ("select 'g' in loc %d\n" , loc );
231
+
232
+ drlink_destroy (& drldata );
233
+ drlink_show (drldata );
190
234
191
235
return 0 ;
192
236
}
0 commit comments