1 #include <stdio.h>
2 #include <stdlib.h>
3
4 #define T 1
5 #define F 2
6
7 typedef int ElementType;
8 typedef int Booleam;
9
10 struct node
11 {
12 ElementType value;
13 struct node* next;
14 };
15
16 typedef struct node* Node;
17
18 Booleam insert_tail(Node head, ElementType value);
19 Booleam insert_head(Node head, ElementType value);
20 Booleam insert_index(Node head, ElementType value, int index);
21 void delete_value(Node head, ElementType value);
22 Booleam delete_index(Node head, int index);
23 Booleam update_index(Node head, ElementType value, int index);
24 Booleam update_value(Node head, ElementType old_value, ElementType new_value);
25 Booleam quary_index(Node head, int index);
26 Booleam quary_value(Node head, ElementType value);
27 Booleam length(Node head);
28 Booleam init(Node* head);
29 void print(Node head);
30
31 int main()
32 {
33 Node head = NULL;
34 init(&head);
35 int i;
36 for (i = 0; i < 10; i++)
37 {
38 insert_tail(head, i);
39 }
40 print(head);
41 for (i = 0; i < 10; i++)
42 {
43 insert_head(head, i);
44 }
45 print(head);
46
47 printf("length = %d\n", length(head));
48
49 insert_index(head, 99, 0);
50 insert_index(head, 99, 11);
51 insert_index(head, 99, length(head));
52 print(head);
53
54 delete_index(head , 11);
55 delete_index(head , 0);
56 delete_index(head , length(head)-1);
57 print(head);
58
59 delete_value(head, 1000);
60 delete_value(head, 0);
61 print(head);
62
63 update_index(head, 100, 0);
64 update_index(head, 100, length(head)/2);
65 update_index(head, 100, length(head)-1);
66 print(head);
67 update_value(head, 100, 2000);
68 print(head);
69
70 quary_index(head, 0);
71 quary_value(head, 2000);
72
73 return 0;
74 }
75
76 Booleam quary_index(Node head, int index)
77 {
78 if (index < 0 || index > length(head))
79 {
80 return F;
81 }
82 int i;
83 for (i = 0; i < index; i++)
84 {
85 head = head->next;
86 }
87 printf("find = %d index =%d\n", head->next->value, index);
88
89 return T;
90 }
91
92 Booleam quary_value(Node head, ElementType value)
93 {
94 Node temp = head;
95 int i = 0;
96 int count = 0;
97 while (temp->next != head)
98 {
99 if (temp->next->value == value)
100 {
101 count++;
102 printf("find = %d index = %d\n", value, i );
103 }
104 i++;
105 temp = temp->next;
106 }
107 if (0 == count)
108 {
109 printf("no this value\n");
110 }
111 return T;
112 }
113
114 Booleam update_index(Node head, ElementType value, int index)
115 {
116 if (index < 0 || index > length(head))
117 {
118 return F;
119 }
120 int i;
121 for (i = 0; i < index; i++)
122 {
123 head = head->next;
124 }
125 head->next->value = value;
126
127 return T;
128 }
129
130 Booleam update_value(Node head, ElementType old_value, ElementType new_value)
131 {
132 Node temp = head;
133 while (temp->next != head)
134 {
135 if (temp->next->value == old_value)
136 {
137 temp->next->value = new_value;
138 }
139 temp = temp->next;
140 }
141 return T;
142 }
143
144 void delete_value(Node head, ElementType value)
145 {
146 int len = length(head);
147 int count = 0;
148 int i;
149 for (i = 0; i < len; i++ )
150 {
151 if (head->next->value == value)
152 {
153 Node temp = head->next->next;
154 free(head->next);
155 head->next = temp;
156 count++;
157 }
158 else
159 {
160 head = head->next;
161 }
162 }
163 if (0 == count)
164 printf("no this value\n");
165 }
166
167 Booleam delete_index(Node head, int index)
168 {
169 if (index < 0 || index > length(head))
170 {
171 return F;
172 }
173 int i;
174 for (i = 0; i < index; i++)
175 {
176 head = head->next;
177 }
178 Node temp = head->next->next;
179 free(head->next);
180 head->next = temp;
181
182 return T;
183
184 }
185
186 Booleam insert_index(Node head, ElementType value, int index)
188 Node newnode = (Node)malloc(sizeof(struct node));
189 if (NULL == newnode)
190 {
191 return F;
192 }
193 newnode->value = value;
194 if (index < 0 || index > length(head))
195 {
196 return F;
197 }
198 int i;
199 for (i = 0; i < index; i++)
200 {
201 head = head->next;
202 }
203 newnode->next = head->next;
204 head->next = newnode;
205
206 return T;
207
208 }
209
210 Booleam insert_head(Node head, ElementType value)
211 {
212 Node newnode = (Node)malloc(sizeof(struct node));
213 if (NULL == newnode)
214 {
215 return F;
216 }
217 newnode->value = value;
218 newnode->next = head->next;
219 head->next = newnode;
220
221 return T;
222 }
223
224 Booleam insert_tail(Node head, ElementType value)
225 {
226 Node temp = head;
227 Node newnode = (Node)malloc(sizeof(struct node));
228 if (NULL == newnode)
229 {
230 return F;
231 }
232 newnode->value = value;
233 newnode->next = head;
234 while (temp->next != head)
235 {
236 temp = temp->next;
237 }
238 temp->next = newnode; /*temp->next = head; */
239 return T;
240 }
241 Booleam length(Node head)
242 {
243 Node temp = head;
244 int count = 0;
245 while (temp->next != head)
246 {
247 count++;
248 temp = temp->next;
2250 return count;
251 }
252
253 Booleam init(Node* head)
254 {
255 Node newnode = (Node)malloc(sizeof(struct node));
256 if (NULL == newnode)
257 {
258 return F;
259 }
260 newnode->next = newnode; /*error newnode->next = head;*/
261 *head = newnode;
262
263 return T;
264 }
265
266
267 void print(Node head)
268 {
269 Node temp = head;
270 while (temp->next != head)
271 {
272 printf("%d ", temp->next->value);
273 temp = temp->next;
274 }
275 printf("\n");
276 }
49 }
单向循环链表
最新推荐文章于 2024-07-06 07:09:02 发布