1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 typedef char * ElemType;
6
7 typedef struct DuLNode {
8 ElemType data;
9 struct DuLNode *prior, *next;
10 } DuLNode, *DuLinkList;
11
12
13 DuLinkList create(){
14 return (DuLinkList)malloc(sizeof(DuLNode));
15 }
16
17 char * create_str(char *str){
18 char *ss = (char *)malloc((strlen(str) + 1) * sizeof(char));
19 strcpy(ss, str);
20 return ss;
21 }
22
23 void scan(DuLinkList L){
24 int n;
25 char str[1024];
26 DuLinkList lp, p = L;
27 scanf("%d", &n);
28 while(n--){
29 scanf("%s", str);
30
31 lp = create();
32 lp->data = create_str(str);
33 lp->prior = p;
34 lp->next = NULL;
35
36 p->next = lp;
37
38 p = lp;
39 }
40 }
41 void insertion_sort(DuLinkList L){
42
43 DuLinkList sign = NULL, p1, p2, p = L->next;
44 for(DuLinkList cnt = p; cnt->next != NULL; cnt = cnt->next){
45 for(p1 = p, p2 = p->next; p2 != sign; p1 = p1->next, p2 = p2->next){
46 if(strcmp(p1->data, p2->data) >= 0){
47 char *tmp = p1->data;
48 p1->data = p2->data;
49 p2->data = tmp;
50 }
51 }
52 sign = p1;
53 }
54 }
55
56 void print(DuLinkList L){
57 DuLinkList p = L->next;
58 while(p != NULL){
59 printf("%s ", p->data);
60 p = p->next;
61 }
62 puts("");
63 }
64
65 int main(){
66 //freopen("data.txt", "r", stdin);
67 DuLNode L;
68 //输入数据
69 scan(&L);
70 //打印输出
71 print(&L);
72 //冒泡排序
73 insertion_sort(&L);
74 //打印数据
75 print(&L);
76
77 return 0;
78 }