zoukankan      html  css  js  c++  java
  • 动态数列排序

       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:  
  • 相关阅读:
    CppUnit
    vconfig in linux
    POSIX semaphore: sem_open, sem_close, sem_post, sem_wait
    (Windows Command) diskpart
    亮块检测及取出亮块的中心坐标
    CacheMetaData Method of Activity
    (C#) Encoding.
    (C#) 线程操作 限制可同时访问某一资源或资源池的线程数。Semaphore 类。Mutex类
    (C# 基础) 跳转 (break, continue, goto, return, throw ).
    (C#基础) 字符串数据和操作
  • 原文地址:https://www.cnblogs.com/steven_oyj/p/1745951.html
Copyright © 2011-2022 走看看