1 #include <stdio.h>
2 #include <stdlib.h>
3 typedef struct student *Liststu;
4 struct student {
5 int age;
6 Liststu next;
7 };
8 Liststu inset(Liststu stu, int age);
9 void print(Liststu stu);
10 Liststu Swap_Data_Sort(Liststu stu);
11 Liststu Swap_List_Sort(Liststu stu);
12 Liststu swap(Liststu stu);
13 int main()
14 {
15 Liststu stu;
16 stu = NULL;
17 stu = inset(stu, 19);
18 stu = inset(stu, 26);
19 stu = inset(stu, 15);
20 stu = inset(stu, 18);
21 stu = inset(stu, 25);
22 stu = inset(stu, 21);
23 stu = inset(stu, 20);
24 stu = Swap_List_Sort(stu);
25 print(stu);
26 return 0;
27 }
28 Liststu inset(Liststu stu, int age) //插入数据(尾插法)
29 {
30 Liststu temp, temp1;
31 temp = (Liststu)malloc(sizeof(*temp));
32 temp1 = (Liststu)malloc(sizeof(*temp1));
33 if(temp == NULL || temp1 == NULL) {
34 printf("创建失败!");
35 exit(1);
36 }
37 temp1 = stu;
38 temp->age = age;
39 if(temp1) {
40 while(temp1->next != NULL) {
41 temp1 = temp1->next;
42 }
43 temp1->next = temp;
44 temp->next = NULL;
45 }
46 else {
47 temp->next = NULL;
48 stu = temp;
49 }
50 return stu;
51 }
52 void print(Liststu stu) //打印链表
53 {
54 for(; stu; stu = stu->next) {
55 printf("%d\n", stu->age);
56 }
57 }
58 Liststu Swap_Data_Sort(Liststu stu) //链表排序(数据交换)
59 {
60 int temp;
61 Liststu p1, p2;
62 p1 = stu;
63 while(p1) {
64 for(p2 = p1->next; p2; p2 = p2->next) {
65 if(p1->age > p2->age) {
66 temp = p1->age;
67 p1->age = p2->age;
68 p2->age = temp;
69 }
70 }
71 p1 = p1->next;
72 }
73 return stu;
74 }
75 Liststu Swap_List_Sort(Liststu stu)
76 {
77 Liststu p1, p2, temp1, temp2;
78 p1 = stu;
79 while(p1) {
80 for(p2 = p1->next; p2; p2 = p2->next) {
81 if(p1->age > p2->age) {
82 temp1 = p1;
83 temp2 = p2;
84 p2->next = temp1->next;
85 p2 = p1;
86 p1->next = temp2->next;
87 p1 = temp2;
88 }
89 }
90 p1 = p1->next;
91 }
92 return stu;
93 }
94 Liststu swap(Liststu stu) //交换两个节点
95 {
96 Liststu p1, p2, temp, prep1, prep2;
97 p1 = stu->next;
98 prep1 = stu;
99 prep2 = p1->next;
100 p2 = prep2->next;
101 temp = p2->next;
102 prep1->next = p2;
103 prep2->next = p1;
104 p2->next = prep2;
105 p1->next = temp;
106 return stu;
107 }