Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2228250
  • 博文数量: 556
  • 博客积分: 11457
  • 博客等级: 上将
  • 技术积分: 5973
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-24 22:33
文章分类

全部博文(556)

文章存档

2013年(22)

2012年(74)

2011年(460)

分类: C/C++

2012-08-13 17:27:47


点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #include <stdlib.h>
  4. typedef struct Node
  5. {
  6.     int data; //数据域
  7.     struct Node * pNext; //指针域
  8. }NODE, * PNODE;

  9. //函数声明
  10. PNODE create_list(void);
  11. void traverse_list(PNODE pHead);
  12. bool is_empty(PNODE pHead);
  13. int length_list(PNODE);
  14. bool insert_list(PNODE,int,int);
  15. bool delete_list(PNODE,int,int *);
  16. void sort_list(PNODE);
  17. int main(void)
  18. {
  19.    PNODE pHead = NULL;
  20.    pHead = create_list(); //创建一个非循环单链表,并将该链表的头结点的地址赋给pHead
  21.    
  22.    int len = length_list(pHead);
  23.     printf("链表的长度为:%4d\n",len);
  24.     printf("排序前链表序列为:\n");
  25.     traverse_list(pHead);
  26.      printf("排序后链表序列为:\n");
  27.     sort_list(pHead);
  28.     traverse_list(pHead);

  29.     return 0;
  30. }

  31. PNODE create_list(void)
  32. {
  33.      int len; //用来存放有效结点的个数
  34.      int i;
  35.      int val; //用来临时存放用户输入的结点的值

  36.      PNODE pHead = (PNODE)malloc(sizeof(NODE));
  37.      if (NULL == pHead)
  38.      {
  39.          printf("分配失败,程序终止!");
  40.          exit(-1);
  41.      }
  42.      PNODE pTail = pHead;
  43.      pTail->pNext =NULL;
  44.      printf("请输入您需要生成的链表结点的个数:len=");
  45.      scanf("%d",&len);

  46.      for (i=0;i<len;++i)
  47.      {
  48.          printf("请输入第%d个结点的值:",i+1);
  49.          scanf("%d",&val);
  50.          PNODE pNew = (PNODE)malloc(sizeof(NODE));
  51.          if (NULL == pNew)
  52.          {
  53.              printf("分配失败,程序终止!");
  54.              exit(-1);
  55.          }
  56.          pNew->data = val;
  57.          pTail->pNext = pNew; //把pNew挂在了pTail的后边
  58.          pNew->pNext = NULL;
  59.      pTail = pNew;
  60.      }
  61.     return pHead;
  62. }

  63. void traverse_list(PNODE pHead)
  64. {
  65.     PNODE p = pHead->pNext;
  66.     while (NULL != p)
  67.     {
  68.         printf("%d ",p->data);
  69.         p=p->pNext;
  70.     }
  71.     printf("\n");
  72. }

  73. bool is_empty(PNODE pHead)
  74. {
  75.     if (NULL == pHead->pNext)
  76.         return true;
  77.     else
  78.         return false;
  79. }

  80. int length_list(PNODE pHead)
  81. {
  82.      PNODE p = pHead->pNext;
  83.      int len=0; //局部变量必须赋初值,否则排序会出错 因为len中为垃圾值

  84.      while(NULL != p)
  85.      {
  86.          ++len;
  87.          p = p->pNext;
  88.      }
  89.      return len;
  90. }

  91. void sort_list(PNODE pHead)
  92. {
  93.     int i,j,tmp;
  94.     int len = length_list(pHead);
  95.     PNODE p,q;
  96.     for (i=0,p=pHead->pNext; i<len-1; ++i,p=p->pNext)
  97.     {
  98.         for(j=i+1,q=p->pNext; j<len; ++j,q=q->pNext)
  99.         {
  100.            if (p->data > q->data)
  101.            {
  102.              tmp = p->data;
  103.              p->data = q->data;
  104.              q->data =tmp;
  105.            }
  106.         }
  107.             
  108.     }
  109. }

  110. /*
  111.     for(i=0;i<len-1;++i)
  112.     {
  113.         for (j=i+1;j<len;++j)
  114.         {
  115.             if (a[i] > a[j])
  116.             {
  117.                tmp = a[i];
  118.              a[i] = a[j];
  119.              a[j] = tmp;
  120.             }
  121.         }
  122.     }
  123. */
阅读(1305) | 评论(0) | 转发(1) |
0

上一篇:typedef的用法

下一篇:堆与栈的区别

给主人留下些什么吧!~~