双端链表 冒泡排序 有头结点

 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 }
原文地址:https://www.cnblogs.com/xuqiulin/p/6179080.html