10000 drlink: delete & amend 实现 · home-coder/data-abstraction-001@957d23a · GitHub
[go: up one dir, main page]

Skip to content

Commit 957d23a

Browse files
author
oneface
committed
drlink: delete & amend 实现
1 parent ebe4b10 commit 957d23a

File tree

1 file changed

+74
-2
lines changed

1 file changed

+74
-2
lines changed

002-drlink.c

Lines changed: 74 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,62 @@ static void drlink_insert(drlink_data **drldata, unsigned int loc, char data)
9393
ndrldata->prev = temp;
9494
}
9595

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+
96152
int main()
97153
{
98154
drlink_data *drldata;
@@ -109,9 +165,25 @@ int main()
109165
drlink_show(drldata);
110166
drlink_insert(&drldata, 4, 'i');
111167
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);
112186
#if 0
113-
drlink_delete();
114-
drlink_amend();
115187
drlink_select();
116188
drlink_destroy();
117189
#endif

0 commit comments

Comments
 (0)
0