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

Skip to content

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

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