鱼C论坛

 找回密码
 立即注册
查看: 2290|回复: 2

有谁能看看这错哪了么

[复制链接]
发表于 2018-6-4 23:30:43 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 漫珠沙华 于 2018-6-5 09:55 编辑
  1. [code][code][code]#include <stdio.h>
  2. #include<malloc.h>
  3. #include "linklist.cpp"  
  4. typedef struct node
  5. {
  6.         int data;
  7.         struct node *next;
  8. }Linknode;

  9. void Move(Linknode*&L)
  10. {
  11.         Linknode *p=L->next,*pre=L;
  12.         while (p!=NULL && p->data<0)
  13.         {
  14.                 pre=p;
  15.                 p=pre->next;
  16.         }
  17.         while (p!=NULL)
  18.         {
  19.                 if(p->data<0)
  20.                 {
  21.                         pre->next=p->next;
  22.                         p->next=L->next;
  23.                         L->next=p;
  24.                         p=pre->next;
  25.                        
  26.                 }
  27.                 else
  28.                 {
  29.                         pre=p;
  30.                         p=p->next;
  31.                 }
  32.         }
  33. }
  34. int main()
  35. {
  36.         LinkNode *L;
  37.         int a[] ={
  38.                 1,-3,56,23,-4,-12,32,33,0,0
  39.         };
  40.         CreateListR(L,a,10);
  41.         printf("L:"); DispList(L);
  42.         Move(L);
  43.         printf("L:"); DispList(L);
  44.        
  45. }





复制代码
[/code][/code][/code]

  1. //单链表基本运算算法
  2. #include <stdio.h>
  3. #include <malloc.h>
  4. typedef int ElemType;
  5. typedef struct LNode  
  6. {
  7.         ElemType data;
  8.         struct LNode *next;                //指向后继结点
  9. } LinkNode;                                        //声明单链表结点类型
  10. void CreateListF(LinkNode *&L,ElemType a[],int n)
  11. //头插法建立单链表
  12. {
  13.         LinkNode *s;
  14.         L=(LinkNode *)malloc(sizeof(LinkNode));          //创建头结点
  15.         L->next=NULL;
  16.         for (int i=0;i<n;i++)
  17.         {       
  18.                 s=(LinkNode *)malloc(sizeof(LinkNode));//创建新结点s
  19.                 s->data=a[i];
  20.                 s->next=L->next;                        //将结点s插在原开始结点之前,头结点之后
  21.                 L->next=s;
  22.         }
  23. }
  24. void CreateListR(LinkNode *&L,ElemType a[],int n)
  25. //尾插法建立单链表
  26. {
  27.         LinkNode *s,*r;
  28.         L=(LinkNode *)malloc(sizeof(LinkNode));          //创建头结点
  29.         L->next=NULL;
  30.         r=L;                                        //r始终指向终端结点,开始时指向头结点
  31.         for (int i=0;i<n;i++)
  32.         {       
  33.                 s=(LinkNode *)malloc(sizeof(LinkNode));//创建新结点s
  34.                 s->data=a[i];
  35.                 r->next=s;                        //将结点s插入结点r之后
  36.                 r=s;
  37.         }
  38.         r->next=NULL;                        //终端结点next域置为NULL
  39. }
  40. void InitList(LinkNode *&L)
  41. {
  42.         L=(LinkNode *)malloc(sizeof(LinkNode));          //创建头结点
  43.         L->next=NULL;
  44. }
  45. void DestroyList(LinkNode *&L)
  46. {
  47.         LinkNode *pre=L,*p=pre->next;
  48.         while (p!=NULL)
  49.         {        free(pre);
  50.                 pre=p;
  51.                 p=pre->next;
  52.         }
  53.         free(pre);        //此时p为NULL,pre指向尾结点,释放它
  54. }
  55. bool ListEmpty(LinkNode *L)
  56. {
  57.         return(L->next==NULL);
  58. }
  59. int ListLength(LinkNode *L)
  60. {
  61.         LinkNode *p=L;int i=0;
  62.         while (p->next!=NULL)
  63.         {        i++;
  64.                 p=p->next;
  65.         }
  66.         return(i);
  67. }
  68. void DispList(LinkNode *L)
  69. {
  70.         LinkNode *p=L->next;
  71.         while (p!=NULL)
  72.         {        printf("%d ",p->data);
  73.                 p=p->next;
  74.         }
  75.         printf("\n");
  76. }
  77. bool GetElem(LinkNode *L,int i,ElemType &e)
  78. {
  79.         int j=0;
  80.         LinkNode *p=L;
  81.         if (i<=0) return false;                //i错误返回假
  82.         while (j<i && p!=NULL)
  83.         {        j++;
  84.                 p=p->next;
  85.         }
  86.         if (p==NULL)                                //不存在第i个数据结点
  87.                 return false;
  88.         else                                                //存在第i个数据结点
  89.         {        e=p->data;
  90.                 return true;
  91.         }
  92. }
  93. int LocateElem(LinkNode *L,ElemType e)
  94. {
  95.         LinkNode *p=L->next;
  96.         int n=1;
  97.         while (p!=NULL && p->data!=e)
  98.         {        p=p->next;
  99.                 n++;
  100.         }
  101.         if (p==NULL)
  102.                 return(0);
  103.         else
  104.                 return(n);
  105. }
  106. bool ListInsert(LinkNode *&L,int i,ElemType e)
  107. {
  108.         int j=0;
  109.         LinkNode *p=L,*s;
  110.         if (i<=0) return false;                        //i错误返回假
  111.         while (j<i-1 && p!=NULL)                //查找第i-1个结点p
  112.         {        j++;
  113.                 p=p->next;
  114.         }
  115.         if (p==NULL)                                        //未找到位序为i-1的结点
  116.                 return false;
  117.         else                                                        //找到位序为i-1的结点*p
  118.         {        s=(LinkNode *)malloc(sizeof(LinkNode));//创建新结点*s
  119.                 s->data=e;
  120.                 s->next=p->next;                        //将s结点插入到结点p之后
  121.                 p->next=s;
  122.                 return true;
  123.         }
  124. }
  125. bool ListDelete(LinkNode *&L,int i,ElemType &e)
  126. {
  127.         int j=0;
  128.         LinkNode *p=L,*q;
  129.         if (i<=0) return false;                //i错误返回假
  130.         while (j<i-1 && p!=NULL)        //查找第i-1个结点
  131.         {        j++;
  132.                 p=p->next;
  133.         }
  134.         if (p==NULL)                                //未找到位序为i-1的结点
  135.                 return false;
  136.         else                                                //找到位序为i-1的结点p
  137.         {        q=p->next;                                //q指向要删除的结点
  138.                 if (q==NULL)
  139.                         return false;                //若不存在第i个结点,返回false
  140.                 e=q->data;
  141.                 p->next=q->next;                //从单链表中删除q结点
  142.                 free(q);                                //释放q结点
  143.                 return true;
  144.         }
  145. }
复制代码


看第一段代码(函数调用出了问题,不知道怎么改)
D{{N]TZXKN4}J_(U}95LW$C.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-5 08:36:11 | 显示全部楼层

回帖奖励 +1 鱼币

为什么形参要用 *&这种形式,而不用**?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-5 10:00:34 | 显示全部楼层
我已经解决了,把前面的Linknode定义删掉,下面的Linknode改为LinkNode就好了,它跟linklist.cpp文件里的LinkNode冲突了

*&是指针的引用,OK的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 02:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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