|
|
今日学习任务
|
嵌入式 C 语言实战开发-数据动态管理 |
今日任务完成情况
| 今日任务按计划完成 熟练掌握带表头和不带表头的单链表的操作 |
今日开发中出现的问题汇总
|
|
今日未解决问题
| 无 |
今日开发收获 |
|
自我评价
| 今天基本能够跟上老师的教学安排 |
其他
| 无 |
1.不带表头的单链表的简单使用
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 struct node
5 {
6 int num;
7 struct node *next;
8 };
9
10 int main()
11 {
12 struct node *head;
13 struct node *p1 = (struct node *)malloc (sizeof(struct node));
14 struct node *p2 = (struct node *)malloc (sizeof(struct node));
15 struct node *p3 = (struct node *)malloc (sizeof(struct node));
16
17 p1->num = 1;
18 p1->next = p2;
19
20 p2->num = 2;
21 p2->next = p3;
22
23 p3->num = 3;
24 p3->next = NULL;
25
26 head = p1;
27
28 while(head != NULL)
29 {
30 printf("%d\n",head->num);
31 head = head->next;
32 }
33
34 return 0;
35 }
2.不带表头的单链表(初始化、头插、中间插、尾插、入删除、倒序)
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 enum link
5 {
6 LINK_EMPTY,
7 SUCCESS,
8 FAIL,
9 DELETE_SUCCESS,
10 DELETE_FAIL,
11 REVERSE_SUCCESS,
12 REVERSE_FAIL
13 };
14
15 struct node
16 {
17 int num;
18 struct node *next;
19 };
20
21 typedef struct node Node;
22 typedef Node * link;
23
24 void create_link(link *head)
25 {
26 *head = NULL;
27 }
28 void insert_head_node(link newnode, link *head)
29 {
30 newnode->next = *head;
31 *head = newnode;
32 }
33
34 int insert_mid_node(link newnode, link *head, int num)
35 {
36 if(*head == NULL)
37 {
38 return LINK_EMPTY;
39 }
40 else
41 {
42 link temp = *head;
43 while(temp != NULL)
44 {
45 if(temp->num == num)
46 {
47 newnode->next = temp->next;
48 temp->next = newnode;
49 return SUCCESS;
50 }
51 temp = temp->next;
52 }
53 return FAIL;
54 }
55 }
56
57 void insert_tail_node(link newnode, link *head)
58 {
59 if(*head == NULL)
60 {
61 newnode->next = NULL;
62 *head = newnode;
63 }
64 else
65 {
66 link temp = *head;
67 while(temp->next != NULL)
68 {
69 temp = temp->next;
70 }
71 temp->next = newnode;
72 newnode->next = NULL;
73 }
74 }
75
76 int delete_link(link *head, int num)
77 {
78 if(*head == NULL)
79 {
80 return LINK_EMPTY;
81 }
82
83 link temp = *head;
84 if((*head)->num == num)
85 {
86 *head = (*head)->next;
87 free(temp);
88 temp = NULL;
89 return DELETE_SUCCESS;
90 }
91 else
92 {
93 link p = temp;
94 temp = temp->next;
95
96 while(temp != NULL)
97 {
98 if(temp->num == num)
99 {
100 p->next = temp->next;
101 free(temp);
102 temp = NULL;
103 return DELETE_SUCCESS;
104 }
105 p = temp;
106 temp = temp->next;
107 }
108 return DELETE_FAIL;
109 }
110 }
111
112 reverse_link(link *head)
113 {
114 if(*head == NULL || (*head)->next == NULL)
115 {
116 return REVERSE_FAIL;
117 }
118 link p = *head;
119 link s = p->next;
120 link t = s->next;
121
122 while(t != NULL)
123 {
124 s->next = p;
125 p = s;
126 s = t;
127 t = t->next;
128 }
129 s->next = p;
130 (*head)->next = NULL;
131 *head = s;
132 return REVERSE_SUCCESS;
133 }
134
135 void display_link(link head)
136 {
137 link temp = head;
138 while(temp != NULL)
139 {
140 printf("%d\n",temp->num);
141 temp = temp->next;
142 }
143 }
144 int main()
145 {
146 int i;
147 link head;
148 link newnode;
149
150 create_link(&head);
151
152 for(i = 0; i <10; i++)
153 {
154 newnode = (link)malloc(sizeof(Node));
155 newnode->num = i +1;
156 insert_tail_node(newnode,&head);
157 }
158 // delete_link(&head,6);
159
160 reverse_link(&head);
161 display_link(head);
162 #if 0
163 newnode = (link)malloc(sizeof(Node));
164 newnode->num = 12;
165
166 if(insert_mid_node(newnode,&head,6) == SUCCESS)
167 {
168 display_link(head);
169 }
170 else
171 {
172 printf("The link is null or no find!\n");
173 }
174 #endif
175
176 return 0;
177 }
- 带表头的单链表(初始化、头插、中间插入、尾插、删除、逆序)
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 enum link
5 {
6 LINK_EMPTY,
7 SUCCESS,
8 FAIL,
9 DELETE_SUCCESS,
10 DELETE_FAIL,
11 REVERSE_SUCCESS,
12 REVERSE_FAIL
13 };
14
15 struct node
16 {
17 int num;
18 struct node *next;
19 };
20
21 typedef struct node Node;
22 typedef Node * link;
23
24 void create_link(link *head)
25 {
26 *head = (link)malloc(sizeof(Node));
27 (*head)->next = NULL;
28 }
29 void insert_head_node(link newnode, link *head)
30 {
31 newnode->next = (*head)->next;
32 (*head)->next = newnode;
33 }
34
35 int insert_mid_node(link newnode, link *head, int num)
36 {
37 link temp = (*head)->next;
38 while(temp != NULL)
39 {
40 if(temp->num == num)
41 {
42 newnode->next = temp->next;
43 temp->next = newnode;
44 return SUCCESS;
45 }
46 temp = temp->next;
47 }
48 return FAIL;
49 }
50
51 void insert_tail_node(link newnode, link *head)
52 {
53 link temp = *head;
54 while(temp->next != NULL)
55 {
56 temp = temp->next;
57 }
58 temp->next = newnode;
59 newnode->next = NULL;
60 }
61
62 int delete_link(link *head, int num)
63 {
64 link temp = *head;
65 link p = temp;
66 temp = temp->next;
67
68 while(temp != NULL)
69 {
70 if(temp->num == num)
71 {
72 p->next = temp->next;
73 free(temp);
74 temp = NULL;
75 return DELETE_SUCCESS;
76 }
77 p = temp;
78 temp = temp->next;
79 }
80 return DELETE_FAIL;
81 }
82
83 reverse_link(link *head)
84 {
85 if((*head)->next == NULL || (*head)->next->next == NULL)
86 {
87 return REVERSE_FAIL;
88 }
89 link p = *head;
90 link s = p->next;
91 link t = s->next;
92
93 while(t != NULL)
94 {
95 s->next = p;
96 p = s;
97 s = t;
98 t = t->next;
99 }
100 s->next = p;
101 (*head)->next->next = NULL;
102 (*head)->next = s;
103 return REVERSE_SUCCESS;
104 }
105
106 void display_link(link head)
107 {
108 link temp = head->next;
109 while(temp != NULL)
110 {
111 printf("%d\n",temp->num);
112 temp = temp->next;
113 }
114 }
115 int main()
116 {
117 int i;
118 link head;
119 link newnode;
120
121 head = (link)malloc(sizeof(Node));
122 create_link(&head);
123
124 for(i = 0; i <10; i++)
125 {
126 newnode = (link)malloc(sizeof(Node));
127 newnode->num = i +1;
128 insert_tail_node(newnode,&head);
129 //insert_head_node(newnode,&head);
130 }
131 //delete_link(&head,6);
132
133 reverse_link(&head);
134 display_link(head);
135
136 newnode = (link)malloc(sizeof(Node));
137 newnode->num = 12;
138 #if 0
139 if(insert_mid_node(newnode,&head,6) == SUCCESS)
140 {
141 display_link(head);
142 }
143 else
144 {
145 printf("The link is null or no find!\n");
146 }
147 #endif
148
149 return 0;
150 }
4.循环单链表
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 enum link
5 {
6 LINK_EMPTY,
7 SUCCESS,
8 FAIL,
9 DELETE_SUCCESS,
10 DELETE_FAIL,
11 REVERSE_SUCCESS,
12 REVERSE_FAIL
13 };
14
15 struct node
16 {
17 int num;
18 struct node *next;
19 };
20
21 typedef struct node Node;
22 typedef Node * link;
23
24 void create_link(link *head)
25 {
26 *head = (link)malloc(sizeof(Node));
27 (*head)->next = (*head);
28
29 }
30 void insert_head_node(link newnode, link *head)
31 {
32 newnode->next = (*head)->next;
33 (*head)->next = newnode;
34 }
35
36 int insert_mid_node(link newnode, link *head, int num)
37 {
38 link temp = (*head)->next;
39 while(temp != (*head))
40 {
41 if(temp->num == num)
42 {
43 newnode->next = temp->next;
44 temp->next = newnode;
45 return SUCCESS;
46 }
47 temp = temp->next;
48 }
49 return FAIL;
50 }
51
52 void insert_tail_node(link newnode, link *head)
53 {
54 link temp = *head;
55 while(temp->next != (*head))
56 {
57 temp = temp->next;
58 }
59 temp->next = newnode;
60 newnode->next = (*head);
61 }
62
63 int delete_link(link *head, int num)
64 {
65 link temp = *head;
66 link p = temp;
67 temp = temp->next;
68
69 while(temp != (*head))
70 {
71 if(temp->num == num)
72 {
73 p->next = temp->next;
74 free(temp);
75 temp = NULL;
76 return DELETE_SUCCESS;
77 }
78 p = temp;
79 temp = temp->next;
80 }
81 return DELETE_FAIL;
82 }
83
84 reverse_link(link *head)
85 {
86 if((*head)->next == (*head) || (*head)->next->next == (*head))
87 {
88 return REVERSE_FAIL;
89 }
90 link p = *head;
91 link s = p->next;
92 link t = s->next;
93
94 while(t != (*head))
95 {
96 s->next = p;
97 p = s;
98 s = t;
99 t = t->next;
100 }
101 s->next = p;
102 (*head)->next = s;
103 return REVERSE_SUCCESS;
104 }
105
106 void display_link(link head)
107 {
108 link temp = head->next;
109 while(temp != head)
110 {
111 printf("%d\n",temp->num);
112 temp = temp->next;
113 }
114 }
115 int main()
116 {
117 int i;
118 link head;
119 link newnode;
120
121 create_link(&head);
122
123 for(i = 0; i <10; i++)
124 {
125 newnode = (link)malloc(sizeof(Node));
126 newnode->num = i +1;
127 insert_tail_node(newnode,&head);
128 //insert_head_node(newnode,&head);
129 }
130 //delete_link(&head,6);
131
132 reverse_link(&head);
133 display_link(head);
134
135 newnode = (link)malloc(sizeof(Node));
136 newnode->num = 12;
137 #if 0
138 if(insert_mid_node(newnode,&head,6) == SUCCESS)
139 {
140 display_link(head);
141 }
142 else
143 {
144 printf("The link is null or no find!\n");
145 }
146 #endif
147
148 return 0;
149
150 }