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 }