8000 srlink: 循环单链表的创建,已完成插入功能 · home-coder/data-abstraction-001@927a4ac · GitHub
[go: up one dir, main page]

Skip to content

Commit 927a4ac

Browse files
author
oneface
committed
srlink: 循环单链表的创建,已完成插入功能
1 parent 476312f commit 927a4ac

File tree

1 file changed

+112
-0
lines changed

1 file changed

+112
-0
lines changed

002-srlink.c

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
4+
5+
/****** 不要头节点了(头节点不是必须要有的,但是但凡链表一定要有头指针[指向头节点或者首元节点]) !
6+
<------------------
7+
->0->1-> ... ->99->
8+
Tig: 如果没有了头结点,诸如insert delete可能会引起头指针的改变,所以要使用二级指针 **p
9+
******/
10+
11+
typedef struct _srlink_data {
12+
char data;
13+
struct _srlink_data *next;
14+
}srlink_data;
15+
16+
static void srlink_show(srlink_data *srldata)
17+
{
18+
srlink_data *srlp = srldata;
19+
if (!srlp) {
20+
printf("srlink is not exsit\n");
21+
return ;
22+
}
23+
24+
while (1) {
25+
printf("%c->", srlp->data);
26+
if (srlp->next == srldata) {
27+
break;
28+
}
29+
srlp = srlp->next;
30+
}
31+
printf("\n");
32+
}
33+
34+
static void srlink_init(srlink_data **srldata)
35+
{
36+
*srldata = (srlink_data *)malloc(sizeof(srlink_data));
37+
if (!*srldata) {
38+
printf("srlink malloc failed\n");
39+
return ;
40+
}
41+
(*srldata)->next = *srldata;
42+
}
43+
44+
static void srlink_insert(srlink_data **srldata, unsigned int loc, char data)
45+
{
46+
int i = 0;
47+
static int first_init = 0;
48+
srlink_data *srlp = *srldata;
49+
if (!srlp) {
50+
printf("srlink is not exsit\n");
51+
return ;
52+
}
53+
54+
if (first_init == 0 && loc == 0) {
55+
srlp->data = data;
56+
first_init = -1;
57+
return ;
58+
} else {
59+
}
60+
61+
srlink_data *nsrldata = (srlink_data *)malloc(sizeof(srlink_data));
62+
if (!nsrldata) {
63+
printf("nsrldata malloc failed\n");
64+
return ;
65+
}
66+
nsrldata->data = data;
67+
68+
if (loc == 0) { // 首元位置
69+
while (1) {
70+
if (srlp->next == *srldata) {
71+
srlp->next = nsrldata;
72+
nsrldata->next = *srldata;
73+
*srldata = nsrldata;
74+
return ;
75+
}
76+
srlp = srlp->next;
77+
}
78+
}
79+
80+
for (i = 1; i < loc; i++) {
81+
srlp = srlp->next;
82+
if (srlp->next == *srldata) {
83+
printf("insert loc %d is invalid\n", loc);
84+
return ;
85+
}
86+
}
87+
nsrldata->next = srlp->next;
88+
srlp->next = nsrldata;
89+
}
90+
91+
int main()
92+
{
93+
srlink_data *srldata;
94+
srlink_show(srldata);
95+
96+
srlink_init(&srldata);
97+
srlink_show(srldata);
98+
99+
srlink_insert(&srldata, 0, 'm');
100+
srlink_insert(&srldata, 0, 't');
101+
srlink_insert(&srldata, 3, 'e');
102+
srlink_insert(&srldata, 2, 'e');
103+
srlink_insert(&srldata, 1, 'w');
104+
srlink_show(srldata);
105+
#if 0
106+
srlink_delete();
107+
srlink_amend();
108+
srlink_select();
109+
#endif
110+
111+
return 0;
112+
}

0 commit comments

Comments
 (0)
0