鱼C论坛

 找回密码
 立即注册
查看: 2798|回复: 1

链表编译无错误,但排序函数不能工作!

[复制链接]
发表于 2014-8-5 05:17:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本链表为非循环链表,代码成功完成了穿件链表,输出所创建链表,判断是否为空以及计算链表长度这几个功能可以成功完成,但是运行到链表排序功能就不能实现,系统报错。


  1. [code]#include<stdio.h>
  2. #include<malloc.h>

  3. typedef struct Grade    //创建一个GRADE非循环链表
  4. {
  5.    int data;            
  6.    struct Grade * pNext;
  7. }GRADE,* PGRADE;

  8. PGRADE create_list(void);    //创建链表函数
  9. void traverse_list(PGRADE pHead);    //遍历链表函数
  10. bool is_empty(PGRADE pHead);          //检测链表是否为空函数
  11. int length_list(PGRADE pHead);        //求链表长度函数
  12. void sort_list(PGRADE);               //将链表排序函数

  13. int main(void)
  14. {
  15.         PGRADE pHead=NULL;
  16.                 pHead=create_list();
  17.         if(is_empty(pHead))
  18.                 printf("The list is emoty!\n");
  19.         else
  20.             traverse_list(pHead);
  21.         int len = length_list(pHead);
  22.         printf("链表长度是:%d \n",len);    //函数只能实现到这一步,排序函数无法工作!
  23.            
  24.                 sort_list(pHead);            
  25.         traverse_list(pHead);
  26.         return 0;
  27. }

  28. PGRADE create_list(void)
  29. {
  30.         int i;
  31.         int len;
  32.         int val;
  33.         PGRADE pHead=(PGRADE)malloc(sizeof(GRADE));
  34.         printf("please enter the number of elements in your list: ");
  35.         scanf("%d",&len);

  36.         PGRADE pTail=pHead;
  37.         pTail->pNext=NULL;

  38.     for(i=0;i<len;i++)
  39.         {
  40.      PGRADE pNew=(PGRADE)malloc(sizeof(GRADE));
  41.      printf("The %d th number is : \n",i+1);
  42.          scanf("%d",&val);
  43.          pNew->data=val;
  44.          pNew->pNext=NULL;
  45.          pTail->pNext=pNew;
  46.      pTail=pNew;
  47.         }
  48.         return pHead;
  49. }

  50. void traverse_list(PGRADE pHead)
  51. {
  52.   PGRADE p=pHead->pNext;
  53.   while(NULL!=p)
  54.   {
  55.           printf("%d ",p->data);
  56.           p=p->pNext;
  57.   }
  58.   printf("\n");
  59. }

  60. bool is_empty(PGRADE pHead)
  61. {
  62.   if(pHead->pNext==NULL)
  63.           return true;
  64.   else
  65.           return false;
  66. }

  67. int length_list(PGRADE pHead)
  68. {
  69.         PGRADE p=pHead->pNext;
  70.     int len=0;
  71.         while(NULL!=p)     //*********不是p->pNext
  72.         {
  73.                 ++len;
  74.                 p=p->pNext;
  75.         }
  76.         return  len;
  77. }

  78. void sort_list(PGRADE pHead)
  79. {
  80.    int i,j,t;
  81.    PGRADE p,q;
  82.    int len=length_list(pHead);
  83.    for(i=0,p=pHead->pNext;i<len-1;++i,p=p->pNext)
  84.    {
  85.            for(j=j+1,q=p->pNext;j<len;++j,q=q->pNext)
  86.          {
  87.                  if(p->data>q->data)
  88.                  {
  89.                      t=p->data;
  90.                      p->data=q->data;
  91.                      q->data=t;
  92.                  }
  93.          }
  94.    }
  95.   return;
  96. }
复制代码



希望帮忙找一下问题在哪里? 谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-8-5 05:36:22 | 显示全部楼层
自己搞会了!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-12 23:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表