动态数列排序

   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:  
posted @ 2010-05-28 09:02  红脸书生  阅读(440)  评论(0编辑  收藏  举报