1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<malloc.h>
4
5 typedef struct Node{
6 int data;
7 struct Node *next;
8 }node; // 把node 聲明為struct Node.
9
10 node *add(node *head, int data);
11 node *ListDelete(node *head, int i);
12 node *reverse(node *head);
13 node *buddleSort(node *head);
14 node *mergeList(node *head1,node *head2,node *head3);
15
16 void listDestroy(node *head);
17 void print(node *head);
18 int length1(node *head);
19
20
21 int main()
22 {
23 node *head1 = NULL;
24 node *head2 = NULL;
25 node *head3 = NULL;
26 int i = 10;
27 while(i-- > 0)
28 {
29 head1 = add(head1,rand()% 100);
30 head2 = add(head2,rand()% 100);
31 }
32
33 buddleSort(head1);
34 buddleSort(head2);
35
36 print(head1);
37 print(head2);
38
39 head3 = mergeList(head1,head2,head3);
40 print(head3);
41
42 head3 = reverse(head3);
43 print(head3);
44
45 // listDestroy(head1);
46 // listDestroy(head2);
47 listDestroy(head3);
48
49 return 1;
50 }
51
52 // 合並兩個基本有序的鏈表,到head3
53 node *mergeList(node *head1,node *head2,node *head3)
54 {
55 node *tail = NULL;
56 if(head1==NULL)
57 {
58 head3 = head2;
59 return head3;
60 }
61 else if(head2==NULL)
62 {
63 head3 = head1;
64 return head3;
65 }
66 else
67 {
68 if(head1->data > head2->data)
69 {
70 head3 = head2;
71 tail = head3;
72 head2 = head2->next;
73 }
74 else
75 {
76 head3 = head1;
77 tail = head3;
78 head1 = head1->next;
79 }
80 }
81 while(head1&&head2)
82 {
83 if(head1->data > head2->data)
84 {
85 tail->next = head2;
86 tail = head2;
87 head2 = head2->next;
88 }
89 else
90 {
91 tail->next = head1;
92 tail = head1;
93 head1 = head1->next;
94 }
95 }
96 tail ->next = head1 ? head2 : head1; // 插入剩余段。
97
98 return head3;
99 }
100
101 // 用頭插完成鏈表的反轉。
102 node * reverse(node *head)
103 {
104 node * tempHead = NULL,*p=NULL;
105 while(head)
106 {
107 p = head;
108 head = head -> next;
109 p->next = tempHead;
110 tempHead = p;
111 }
112 return tempHead;
113 }
114
115 // 對鏈表冒泡排序 升序
116 node *buddleSort(node *head)
117 {
118 int len = length1(head);
119 node *p1 =head,*p2=head,*tempFinish=NULL;
120 while(len-- > 0)
121 {
122 p1 = p2 = head;
123 while(p2!=tempFinish)
124 {
125 p2=p2->next;
126
127 if(p2==NULL)
128 break;
129
130 else if(p1->data > p2->data)
131 {
132 p1->data = (p1->data)^(p2->data);
133 p2->data = (p1->data)^(p2->data);
134 p1->data = (p1->data)^(p2->data);
135 }
136 p1 = p2;
137 }
138 tempFinish = p1;
139 }
140 return head;
141 }
142
143 // 添加一個元素
144 node * add(node *head, int data)
145 {
146 node *p = NULL;
147 if(head==NULL)
148 {
149 head = (node*)malloc( sizeof(node));
150 head->data = data;
151 head->next = NULL;
152 }
153 else
154 {
155 p = (node*)malloc( sizeof(node));
156 p->data = data;
157 p->next = head;
158 head = p;
159 }
160 return head;
161 }
162
163 // 刪除一個元素
164 node * ListDelete(node *head, int i)
165 {
166 node *p1,*p2;
167 if(i>length1(head))
168 printf( " 刪除位置不正確! ");
169 else
170 {
171 p1 = head;
172 if(i== 0)
173 {
174 head = head->next;
175 free(p1);
176 }
177
178 else
179 {
180 while(--i > 0)
181 {
182 p1 = p1->next;
183 }
184 p2 = p1->next;
185 p1->next = p1->next->next;
186 free(p2);
187 }
188
189 }
190 return head;
191 }
192
193 // 銷毀鏈表
194 void listDestroy(node*head)
195 {
196 node *p = head;
197 print(head);
198 while(head!=NULL)
199 {
200 head = head->next;
201 free(p);
202 p = head;
203 }
204 }
205
206 // 查看鏈表長度
207 int length1(node *head)
208 {
209 node *p = head;
210 unsigned int len= 0;
211 while(p!=NULL)
212 {
213 p = p->next;
214 len++;
215 }
216 return len;
217 }
218
219 // 打印鏈表數據
220 void print(node *head)
221 {
222 while(head!=NULL)
223 {
224 printf( " %d ",head->data);
225 head = head -> next;
226 }
227 printf( " \n ");
228 }
2 #include<stdlib.h>
3 #include<malloc.h>
4
5 typedef struct Node{
6 int data;
7 struct Node *next;
8 }node; // 把node 聲明為struct Node.
9
10 node *add(node *head, int data);
11 node *ListDelete(node *head, int i);
12 node *reverse(node *head);
13 node *buddleSort(node *head);
14 node *mergeList(node *head1,node *head2,node *head3);
15
16 void listDestroy(node *head);
17 void print(node *head);
18 int length1(node *head);
19
20
21 int main()
22 {
23 node *head1 = NULL;
24 node *head2 = NULL;
25 node *head3 = NULL;
26 int i = 10;
27 while(i-- > 0)
28 {
29 head1 = add(head1,rand()% 100);
30 head2 = add(head2,rand()% 100);
31 }
32
33 buddleSort(head1);
34 buddleSort(head2);
35
36 print(head1);
37 print(head2);
38
39 head3 = mergeList(head1,head2,head3);
40 print(head3);
41
42 head3 = reverse(head3);
43 print(head3);
44
45 // listDestroy(head1);
46 // listDestroy(head2);
47 listDestroy(head3);
48
49 return 1;
50 }
51
52 // 合並兩個基本有序的鏈表,到head3
53 node *mergeList(node *head1,node *head2,node *head3)
54 {
55 node *tail = NULL;
56 if(head1==NULL)
57 {
58 head3 = head2;
59 return head3;
60 }
61 else if(head2==NULL)
62 {
63 head3 = head1;
64 return head3;
65 }
66 else
67 {
68 if(head1->data > head2->data)
69 {
70 head3 = head2;
71 tail = head3;
72 head2 = head2->next;
73 }
74 else
75 {
76 head3 = head1;
77 tail = head3;
78 head1 = head1->next;
79 }
80 }
81 while(head1&&head2)
82 {
83 if(head1->data > head2->data)
84 {
85 tail->next = head2;
86 tail = head2;
87 head2 = head2->next;
88 }
89 else
90 {
91 tail->next = head1;
92 tail = head1;
93 head1 = head1->next;
94 }
95 }
96 tail ->next = head1 ? head2 : head1; // 插入剩余段。
97
98 return head3;
99 }
100
101 // 用頭插完成鏈表的反轉。
102 node * reverse(node *head)
103 {
104 node * tempHead = NULL,*p=NULL;
105 while(head)
106 {
107 p = head;
108 head = head -> next;
109 p->next = tempHead;
110 tempHead = p;
111 }
112 return tempHead;
113 }
114
115 // 對鏈表冒泡排序 升序
116 node *buddleSort(node *head)
117 {
118 int len = length1(head);
119 node *p1 =head,*p2=head,*tempFinish=NULL;
120 while(len-- > 0)
121 {
122 p1 = p2 = head;
123 while(p2!=tempFinish)
124 {
125 p2=p2->next;
126
127 if(p2==NULL)
128 break;
129
130 else if(p1->data > p2->data)
131 {
132 p1->data = (p1->data)^(p2->data);
133 p2->data = (p1->data)^(p2->data);
134 p1->data = (p1->data)^(p2->data);
135 }
136 p1 = p2;
137 }
138 tempFinish = p1;
139 }
140 return head;
141 }
142
143 // 添加一個元素
144 node * add(node *head, int data)
145 {
146 node *p = NULL;
147 if(head==NULL)
148 {
149 head = (node*)malloc( sizeof(node));
150 head->data = data;
151 head->next = NULL;
152 }
153 else
154 {
155 p = (node*)malloc( sizeof(node));
156 p->data = data;
157 p->next = head;
158 head = p;
159 }
160 return head;
161 }
162
163 // 刪除一個元素
164 node * ListDelete(node *head, int i)
165 {
166 node *p1,*p2;
167 if(i>length1(head))
168 printf( " 刪除位置不正確! ");
169 else
170 {
171 p1 = head;
172 if(i== 0)
173 {
174 head = head->next;
175 free(p1);
176 }
177
178 else
179 {
180 while(--i > 0)
181 {
182 p1 = p1->next;
183 }
184 p2 = p1->next;
185 p1->next = p1->next->next;
186 free(p2);
187 }
188
189 }
190 return head;
191 }
192
193 // 銷毀鏈表
194 void listDestroy(node*head)
195 {
196 node *p = head;
197 print(head);
198 while(head!=NULL)
199 {
200 head = head->next;
201 free(p);
202 p = head;
203 }
204 }
205
206 // 查看鏈表長度
207 int length1(node *head)
208 {
209 node *p = head;
210 unsigned int len= 0;
211 while(p!=NULL)
212 {
213 p = p->next;
214 len++;
215 }
216 return len;
217 }
218
219 // 打印鏈表數據
220 void print(node *head)
221 {
222 while(head!=NULL)
223 {
224 printf( " %d ",head->data);
225 head = head -> next;
226 }
227 printf( " \n ");
228 }