@@ -93,6 +93,62 @@ static void drlink_insert(drlink_data **drldata, unsigned int loc, char data)
93
93
ndrldata -> prev = temp ;
94
94
}
95
95
96
+ static void drlink_delete (drlink_data * * drldata , unsigned int loc )
97
+ {
98
+ int i = 0 ;
99
+ drlink_data * drlp = * drldata ;
100
+ drlink_data * temp ;
101
+ if (!drlp ) {
102
+ printf ("drlink is not exsit\n" );
103
+ return ;
104
+ }
105
+
106
+ if (drlp -> next == * drldata && loc == 0 ) { // head 0 0
107
+ free (drlp );
108
+ * drldata = NULL ;
109
+ return ;
110
+ }
111
+ if (loc == 0 ) { //head 0... 1 1
112
+ temp = drlp -> prev ;
113
+ temp -> next = drlp -> next ;
114
+ drlp -> next -> prev = temp ;
115
+ free (* drldata );
116
+ * drldata = temp -> next ;
117
+ return ;
118
+ }
119
+ for (; i < loc ; i ++ ) { // head... n
120
+ if (drlp -> next == * drldata ) {
121
+ printf ("delete loc %d is invalid\n" , loc );
122
+ return ;
123
+ }
124
+ drlp = drlp -> next ;
125
+ }
126
+ temp = drlp -> prev ;
127
+ temp -> next = drlp -> next ;
128
+ drlp -> next -> prev = temp ;
129
+ free (drlp );
130
+ drlp = NULL ;
131
+ }
132
+
133
+ static void drlink_amend (drlink_data * drldata , unsigned int loc , char data )
134
+ {
135
+ int i = 0 ;
136
+ drlink_data * drlp = drldata ;
137
+ if (!drlp ) {
138
+ printf ("drlink is not exsit\n" );
139
+ return ;
140
+ }
141
+
142
+ for (; i < loc ; i ++ ) {
143
+ drlp = drlp -> next ;
144
+ if (drlp == drldata ) {
145
+ printf ("amend loc %d is invalid\n" , loc );
146
+ return ;
147
+ }
148
+ }
149
+ drlp -> data = data ;
150
+ }
151
+
96
152
int main ()
97
153
{
98
154
drlink_data * drldata ;
@@ -109,9 +165,25 @@ int main()
109
165
drlink_show (drldata );
110
166
drlink_insert (& drldata , 4 , 'i' );
111
167
drlink_show (drldata );
168
+ drlink_insert (& drldata , 2 , 'm' );
169
+ drlink_show (drldata );
170
+
171
+ drlink_delete (& drldata , 0 );
172
+ drlink_show (drldata );
173
+ drlink_delete (& drldata , 1 );
174
+ drlink_show (drldata );
175
+ drlink_delete (& drldata , 2 );
176
+ drlink_show (drldata );
177
+ drlink_delete (& drldata , 2 );
178
+ drlink_show (drldata );
179
+
180
+ drlink_amend (drldata , 1 , 'p' );
181
+ drlink_show (drldata );
182
+ drlink_amend (drldata , 0 , 'u' );
183
+ drlink_show (drldata );
184
+ drlink_amend (drldata , 2 , 'y' );
185
+ drlink_show (drldata );
112
186
#if 0
113
- drlink_delete ();
114
- drlink_amend ();
115
187
drlink_select ();
116
188
drlink_destroy ();
117
189
#endif
0 commit comments