@@ -23,10 +23,10 @@ static void srlink_show(srlink_data *srldata)
23
23
24
24
while (1 ) {
25
25
printf ("%c->" , srlp -> data );
26
- if (srlp -> next == srldata ) {
26
+ srlp = srlp -> next ;
27
+ if (srlp == srldata ) {
27
28
break ;
28
29
}
29
- srlp = srlp -> next ;
30
30
}
31
31
printf ("\n" );
32
32
}
@@ -92,6 +92,7 @@ static void srlink_delete(srlink_data **srldata, unsigned int loc)
92
92
{
93
93
int i ;
94
94
srlink_data * srlp = * srldata ;
95
+ srlink_data * prev = NULL ;
95
96
if (!srlp ) {
96
97
printf ("srlink is not exsit\n" );
97
98
return ;
@@ -107,9 +108,13 @@ static void srlink_delete(srlink_data **srldata, unsigned int loc)
107
108
108
109
//head(0)->(1)...->head(0); 0
109
110
if (loc == 0 ) {
110
- srlp = srlp -> next ;
111
+ prev = * srldata ;
112
+ while (prev -> next != * srldata ) {
113
+ prev = prev -> next ;
114
+ }
115
+ prev -> next = (* srldata )-> next ;
111
116
free (* srldata );
112
- * srldata = srlp ;
117
+ * srldata = prev -> next ;
113
118
return ;
114
119
}
115
120
@@ -127,6 +132,49 @@ static void srlink_delete(srlink_data **srldata, unsigned int loc)
127
132
desrlp = NULL ;
128
133
}
129
134
135
+ static void srlink_amend (srlink_data * srldata , unsigned int loc , char data )
136
+ {
137
+ int i = 0 ;
138
+ srlink_data * srlp = srldata ;
139
+ if (!srlp ) {
140
+ printf ("srlink is not exsit\n" );
141
+ return ;
142
+ }
143
+
144
+ for (; i < loc ; i ++ ) {
145
+ srlp = srlp -> next ;
146
+ if (srlp == srldata ) {
147
+ printf ("amend loc %d is invalid\n" , loc );
148
+ return ;
149
+ }
150
+ }
151
+
152
+ srlp -> data = data ;
153
+ }
154
+
155
+ static int srlink_select (srlink_data * srldata , char data )
156
+ {
157
+ int loc = -1 ;
158
+ srlink_data * srlp = srldata ;
159
+ if (!srlp ) {
160
+ printf ("srlink is not exsit\n" );
161
+ return -1 ;
162
+ }
163
+
164
+ if (srlp -> data == data ) {
165
+ loc = 0 ;
166
+ return loc ;
167
+ }
168
+ for (srlp = srlp -> next , loc = 1 ; srlp != srldata ; srlp = srlp -> next ) {
169
+ if (srlp -> data == data ) {
170
+ return loc ;
171
+ }
172
+ loc ++ ;
173
+ }
174
+
175
+ return -1 ;
176
+ }
177
+
130
178
int main ()
131
179
{
132
180
srlink_data * srldata ;
@@ -137,19 +185,34 @@ int main()
137
185
138
186
srlink_insert (& srldata , 0 , 'm' );
139
187
srlink_insert (& srldata , 0 , 't' );
188
+ srlink_insert (& srldata , 0 , 't' );
189
+ srlink_insert (& srldata , 0 , 't' );
190
+ srlink_insert (& srldata , 3 , 'e' );
191
+ srlink_insert (& srldata , 3 , 'e' );
140
192
srlink_insert (& srldata , 3 , 'e' );
141
193
srlink_insert (& srldata , 2 , 'e' );
142
194
srlink_insert (& srldata , 1 , 'w' );
143
195
srlink_show (srldata );
144
196
145
197
srlink_delete (& srldata , 0 );
198
+ srlink_show (srldata );
199
+ srlink_delete (& srldata , 3 );
146
200
srlink_delete (& srldata , 1 );
147
201
srlink_delete (& srldata , 3 );
148
202
srlink_show (srldata );
149
- #if 0
150
- srlink_amend ();
151
- srlink_select ();
152
- #endif
203
+
204
+ srlink_amend (srldata , 3 , 'l' );
205
+ srlink_amend (srldata , 0 , 'l' );
206
+ srlink_amend (srldata , 8 , 'l' );
207
+ srlink_show (srldata );
208
+
209
+ int loc ;
210
+ loc = srlink_select (srldata , 'l' );
211
+ printf ("select 'l' in loc %d\n" , loc );
212
+ loc = srlink_select (srldata , 'm' );
213
+ printf ("select 'm' in loc %d\n" , loc );
214
+ loc = srlink_select (srldata , 'q' );
215
+ printf ("select 'q' in loc %d\n" , loc );
153
216
154
217
return 0 ;
155
218
}
0 commit comments