1: /******************************************Dynamic Sort*************************************************/
2: #include <string.h>
3: #include <stdio.h>
4: #include <malloc.h>
5:
6: /*定义int为ElemType类型*/
7: typedef int ElemType;
8:
9: /*定义链表的结点类型*/
10: typedef struct node {
11: ElemType data; /*数据域*/
12: struct node *next; /*指针域*/
13: } LNode, *LinkList;
14:
15: /*创建一个长度为n的链表,并输入数据*/
16: LinkList GreatLinkList(int n)
17: {
18: LinkList p, r, list = NULL;
19: ElemType e;
20: int i;
21:
22: for(i = 1; i <= n; i++)
23: {
24: scanf("%d", &e);
25: p = (LinkList)malloc(sizeof(LNode));
26: p->data = e;
27: p->next = NULL;
28:
29: if(!list)
30: list = p;
31: else
32: r->next = p;
33:
34: r = p;
35: }
36:
37: return list;
38: }
39:
40: /*向链表中插入结点*/
41: void insertList(LinkList *list, LinkList q, ElemType e) {
42: LinkList p;
43: p = ( LinkList)malloc(sizeof(LNode));
44: p->data = e;
45:
46: if(!*list) {
47: *list = p;
48: p->next = NULL;
49: }
50: else {
51: p->next = q->next;
52: q->next = p;
53: }
54: }
55:
56: /*基于链表的冒泡排序算法*/
57: void Sort(LinkList q)
58: {
59: LNode *p = q;
60: int t, i, j, k = 0;
61:
62: while(p) {
63: k++;
64: p = p->next;
65: }
66:
67: p = q;
68:
69: for(i = 0; i < k - 1; i++)
70: {
71: for(j = 0; j < k - i - 1; j++)
72: {
73: if(p->data > p->next->data)
74: {
75: t = p->data;
76: p->data = p->next->data;
77: p->next->data = t;
78: }
79:
80: p = p->next;
81: }
82:
83: p = q;
84: }
85:
86: }
87:
88: /*打印出排序后的新链表中的内容*/
89: void Print(LinkList q)
90: {
91: while(q)
92: {
93: printf("%d ", q->data);
94: q = q->next;
95: }
96: }
97:
98: /*主函数*/
99: int main()
100: {
101: ElemType e;
102: LinkList l, q; /*定义一个链表l*/
103: printf("Please input some integer digit and type 0 for end\n");
104: q = l = GreatLinkList(1); /*创建一个链表结点,q和l指向该结点*/
105:
106: scanf("%d", &e);
107:
108: while(e) /*循环地输入数据,同时插入新生成的结点*/
109: {
110: insertList(&l, q, e) ;
111: q = q->next;
112: scanf("%d", &e);
113: }
114:
115:
116: Sort(l);
117: Print(l);
118: }
119: