愷龍 发表于 2020-10-10 15:04:53

为什么能编译但是仍然有报错?

代码如下,为什么能编译以后但是仍然有报错?
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
typedef int DataType;
typedef struct Node
{
        DataType data;
        struct Node * next;
}LinkList;
LinkList *creataHeadList(LinkList*L,int num)//头插法建立单链表
{         LinkList *s;
    int i=1;
        while(i<num)
        {
                s=(LinkList*)malloc(sizeof(LinkList));
                s->data=i;
                s->next=L->next;
                L->next=s;
                ++i;
        }
        L->data=num;
        return L;
}
LinkList *createTailList(LinkList *L,int num)//尾插法建立单链表
{
        LinkList *s,*r;
        int i=0;
        L=r=NULL;
        while(i<num)
        {
                s=(LinkList*)malloc(sizeof(LinkList));
                s->data=i;
                s->next=NULL;
                r->next=s;
          ++i;
        }
        L->data=num;
        return L;
}

LinkList *addElement(LinkList *L,DataType e,int i)//单链表增
{
        LinkList *s;
        int count=0;
        if(i<0||i>L->data)
        return false;
        while(count<i)
        {
                L=L->next;
                ++count;
       }
       s=(LinkList*)malloc(sizeof(LinkList));
       s->data=e;
       s->next=L->next;
       L->next=s;
       ++L->data;
       return L;
}
DeleteElement(LinkList *L,int i)//单链表删
{
        LinkList *p;
        int count=0;
        if(i<0||i>L->data)
        return 0;
        while(count<i)
        {
                p=L;
                L=L->next;
                ++count;
        }
        p->next=L->next;
        free(L);
        --L->data;
        return true;
}
LinkList *FindElement(LinkList *L,DataType e)
{
        while(L!=NULL)
        if(L->data==e)
        {
                return L;
       }
       L=L->next;
}
int main()
{
        LinkList createHeadLinkList(LinkList *L,int);
        LinkList *L=(LinkList*)malloc(sizeof(LinkList));
        L->next=NULL;
        createLinkList(L,100);
printf("&d",L->next->data);
return 0;
}

愷龍 发表于 2020-10-10 15:06:32

https://pic.downk.cc/item/5f815d661cd1bbb86bea04d2.png报错截图

乐乐学编程 发表于 2020-10-10 15:22:06

愷龍 发表于 2020-10-10 15:06
报错截图

我在第 90 行看到,你调用了函数 createLinkList(L,100); 可是我在你程序中,没有看到你对该函数进行定义,另外,你第 2 行加入的头函数 #include <stdbool.h> ,若定义好了createLinkList(L,100); 问题仍然存在,你就得检查一下 stdbool.h 这个头函数有没有问题

愷龍 发表于 2020-10-10 15:25:12

乐乐学编程 发表于 2020-10-10 15:22
我在第 90 行看到,你调用了函数 createLinkList(L,100); 可是我在你程序中,没有看到你对该函数进行定义 ...

这个函数确实最后有失误,更改以后是这样,然后报错是这样#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
typedef int DataType;
typedef struct Node
{
        DataType data;
        struct Node * next;
}LinkList;
LinkList *creataHeadList(LinkList*L,int num)//头插法建立单链表
{         LinkList *s;
    int i=1;
        while(i<num)
        {
                s=(LinkList*)malloc(sizeof(LinkList));
                s->data=i;
                s->next=L->next;
                L->next=s;
                ++i;
        }
        L->data=num;
        return L;
}
LinkList *createTailList(LinkList *L,int num)//尾插法建立单链表
{
        LinkList *s,*r;
        int i=0;
        L=r=NULL;
        while(i<num)
        {
                s=(LinkList*)malloc(sizeof(LinkList));
                s->data=i;
                s->next=NULL;
                r->next=s;
          ++i;
        }
        L->data=num;
        return L;
}

LinkList *addElement(LinkList *L,DataType e,int i)//单链表增
{
        LinkList *s;
        int count=0;
        if(i<0||i>L->data)
        return false;
        while(count<i)
        {
                L=L->next;
                ++count;
       }
       s=(LinkList*)malloc(sizeof(LinkList));
       s->data=e;
       s->next=L->next;
       L->next=s;
       ++L->data;
       return L;
}
DeleteElement(LinkList *L,int i)//单链表删
{
        LinkList *p;
        int count=0;
        if(i<0||i>L->data)
        return 0;
        while(count<i)
        {
                p=L;
                L=L->next;
                ++count;
        }
        p->next=L->next;
        free(L);
        --L->data;
        return true;
}
LinkList *FindElement(LinkList *L,DataType e)
{
        LinkList *p=L->next;
        while(p && p->data!=e)
        p=p->next;
        return p;
}
int main()
{
        LinkList createHeadLinkList(LinkList *L,int);
        LinkList *L=(LinkList*)malloc(sizeof(LinkList));
        L->next=NULL;
        createLinkList(L,100);
printf("&d",L->next->data);
return 0;
}
https://pic.downk.cc/item/5f8161cd1cd1bbb86beed14b.png

愷龍 发表于 2020-10-10 15:34:26

愷龍 发表于 2020-10-10 15:25
这个函数确实最后有失误,更改以后是这样,然后报错是这样

如果是头函数的问题,那应该怎么修改?

乐乐学编程 发表于 2020-10-10 15:34:48

愷龍 发表于 2020-10-10 15:25
这个函数确实最后有失误,更改以后是这样,然后报错是这样

我还是没有看到你定义 createLinkList() 函数呀。要调用一个函数,若在调用前定义,就无须声明,若在调用的后面定义,还需要先进行声明

比如,你主函数 main() 里调用函数 createHeadLinkList(LinkList *L,int),我在第10行到第23行看到了定义,而createLinkList() 的定义在哪呢?

愷龍 发表于 2020-10-10 15:38:18

乐乐学编程 发表于 2020-10-10 15:34
我还是没有看到你定义 createLinkList() 函数呀。要调用一个函数,若在调用前定义,就无须声明,若在调 ...

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
typedef int DataType;
typedef struct Node
{
        DataType data;
        struct Node * next;
}LinkList;
LinkList *creataHeadList(LinkList*L,int num)//头插法建立单链表
{         LinkList *s;
    int i=1;
        while(i<num)
        {
                s=(LinkList*)malloc(sizeof(LinkList));
                s->data=i;
                s->next=L->next;
                L->next=s;
                ++i;
        }
        L->data=num;
        return L;
}
LinkList *createTailList(LinkList *L,int num)//尾插法建立单链表
{
        LinkList *s,*r;
        int i=0;
        L=r=NULL;
        while(i<num)
        {
                s=(LinkList*)malloc(sizeof(LinkList));
                s->data=i;
                s->next=NULL;
                r->next=s;
          ++i;
        }
        L->data=num;
        return L;
}

LinkList *addElement(LinkList *L,DataType e,int i)//单链表增
{
        LinkList *s;
        int count=0;
        if(i<0||i>L->data)
        return false;
        while(count<i)
        {
                L=L->next;
                ++count;
       }
       s=(LinkList*)malloc(sizeof(LinkList));
       s->data=e;
       s->next=L->next;
       L->next=s;
       ++L->data;
       return L;
}
DeleteElement(LinkList *L,int i)//单链表删
{
        LinkList *p;
        int count=0;
        if(i<0||i>L->data)
        return 0;
        while(count<i)
        {
                p=L;
                L=L->next;
                ++count;
        }
        p->next=L->next;
        free(L);
        --L->data;
        return true;
}
LinkList *FindElement(LinkList *L,DataType e)
{
        LinkList *p=L->next;
        while(p && p->data!=e)
        p=p->next;
        return p;
}
int main()
{
        LinkList createHeadLinkList(LinkList *L,int);
        LinkList *L=(LinkList*)malloc(sizeof(LinkList));
        L->next=NULL;
        createHeadLinkList(L,100);
printf("&d",L->next->data);
return 0;
}不好意思,漏了一个,但是还是报错跟上个图的报错一样

巴巴鲁 发表于 2020-10-10 15:41:02

0.你看看你头插和尾插的函数名,都不一样!
1.85行函数里你想传什么值?写个int;前面参数传L
2.L未初始化头插法函数里怎么传,未定义啊
3.一个链表能头插和尾插一起用?我是没用过
4.链表没有初始化

愷龍 发表于 2020-10-10 15:50:08

巴巴鲁 发表于 2020-10-10 15:41
0.你看看你头插和尾插的函数名,都不一样!
1.85行函数里你想传什么值?写个int;前面参数传L
2.L未初始 ...

0.头插法和尾插法函数名应该一样?
1.85行是想调用这个头插法函数,然后是想设置形参类型
2.从85就是想初始化头插法函数,但是这一块不会整,纰漏很多
3.头插法和尾插法函数我都写了,但是我想在main函数只使用头插函数,这个应该不会有问题吧,还请指正
4.如何初始化链表?

巴巴鲁 发表于 2020-10-10 15:55:25

愷龍 发表于 2020-10-10 15:50
0.头插法和尾插法函数名应该一样?
1.85行是想调用这个头插法函数,然后是想设置形参类型
2.从85就是想 ...

0.你误会了,我说的是定义时的和主函数的不一样
3.我还真没试过
你学的C++还是C?

愷龍 发表于 2020-10-10 15:58:40

巴巴鲁 发表于 2020-10-10 15:55
0.你误会了,我说的是定义时的和主函数的不一样
3.我还真没试过
你学的C++还是C?

函数不一样这问题更改了,代码如下。然后就抛开头插和尾插这个同时用不说,如果只用这个头插函数来达到存入一串数据和在main中调用并输出这串数据的话,这个代码应该怎么编写。
我学的是C语言,然后现在正在学习链表,还请赐教,谢谢!#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
typedef int DataType;
typedef struct Node
{
        DataType data;
        struct Node * next;
}LinkList;
LinkList *creataHeadList(LinkList*L,int num)//头插法建立单链表
{         LinkList *s;
    int i=1;
        while(i<num)
        {
                s=(LinkList*)malloc(sizeof(LinkList));
                s->data=i;
                s->next=L->next;
                L->next=s;
                ++i;
        }
        L->data=num;
        return L;
}
LinkList *createTailList(LinkList *L,int num)//尾插法建立单链表
{
        LinkList *s,*r;
        int i=0;
        L=r=NULL;
        while(i<num)
        {
                s=(LinkList*)malloc(sizeof(LinkList));
                s->data=i;
                s->next=NULL;
                r->next=s;
          ++i;
        }
        L->data=num;
        return L;
}

LinkList *addElement(LinkList *L,DataType e,int i)//单链表增
{
        LinkList *s;
        int count=0;
        if(i<0||i>L->data)
        printf("不能插入数据");
        while(count<i)
        {
                L=L->next;
                ++count;
       }
       s=(LinkList*)malloc(sizeof(LinkList));
       s->data=e;
       s->next=L->next;
       L->next=s;
       ++L->data;
       return L;
}
DeleteElement(LinkList *L,int i)//单链表删
{
        LinkList *p;
        int count=0;
        if(i<0||i>L->data)
        return 0;
        while(count<i)
        {
                p=L;
                L=L->next;
                ++count;
        }
        p->next=L->next;
        free(L);
        --L->data;
        return true;
}
LinkList *FindElement(LinkList *L,DataType e)
{
        LinkList *p=L->next;
        while(p && p->data!=e)
        p=p->next;
        return p;
}
int main()
{
        LinkList createHeadLinkList(LinkList *L,int);
        LinkList *L=(LinkList*)malloc(sizeof(LinkList));
        L->next=NULL;
        createHeadLinkList(L,100);
printf("&d",L->next->data);
return 0;
}

巴巴鲁 发表于 2020-10-10 16:07:26

抱歉,没看到你已经初始化了
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
typedef int DataType;
typedef struct Node
{
      DataType data;
      struct Node * next;
}LinkList;
LinkList *createHeadList(LinkList*L,int num)//头插法建立单链表
{         LinkList *s;
            int i=1;
      while(i<num)
      {
                s=(LinkList*)malloc(sizeof(LinkList));
                s->data=i;
                s->next=L->next;
                L->next=s;
                ++i;
      }
      L->data=num;
      return L;
}
/*
LinkList *createTailList(LinkList *L,int num)//尾插法建立单链表
{
      LinkList *s,*r;
      int i=0;
      L=r=NULL;
      while(i<num)
      {
                s=(LinkList*)malloc(sizeof(LinkList));
                s->data=i;
                s->next=NULL;
                r->next=s;
            ++i;
      }
      L->data=num;
      return L;
}
*/
LinkList *addElement(LinkList *L,DataType e,int i)//单链表增
{
      LinkList *s;
      int count=0;
      if(i<0||i>L->data)
      printf("不能插入数据");
      while(count<i)
      {
                L=L->next;
                ++count;
         }
         s=(LinkList*)malloc(sizeof(LinkList));
         s->data=e;
         s->next=L->next;
         L->next=s;
         ++L->data;
         return L;
}
DeleteElement(LinkList *L,int i)//单链表删
{
      LinkList *p;
      int count=0;
      if(i<0||i>L->data)
      return 0;
      while(count<i)
      {
                p=L;
                L=L->next;
                ++count;
      }
      p->next=L->next;
      free(L);
      --L->data;
      return true;
}
LinkList *FindElement(LinkList *L,DataType e)
{
         LinkList *p=L->next;
         while(p && p->data!=e)
         p=p->next;
         return p;
}
int main()
{
         //LinkList createHeadLinkList(LinkList *L,int);
         LinkList *L=(LinkList*)malloc(sizeof(LinkList));
         L->next=NULL;
         createHeadList(L,100);
               printf("%d",L->next->data); // 应该是%d啊
               return 0;
}

愷龍 发表于 2020-10-10 16:10:25

巴巴鲁 发表于 2020-10-10 16:07
抱歉,没看到你已经初始化了

可以运行了,出来了,感谢您的解答!

巴巴鲁 发表于 2020-10-10 16:15:14

愷龍 发表于 2020-10-10 16:10
可以运行了,出来了,感谢您的解答!

其实你大方面没有问题,注意一下函数名{:10_304:}
我再试试可不可以头插和尾插一起用

愷龍 发表于 2020-10-10 16:17:18

巴巴鲁 发表于 2020-10-10 16:15
其实你大方面没有问题,注意一下函数名
我再试试可不可以头插和尾插一起用

好的,好的,如果有新的发现我们共享呀

愷龍 发表于 2020-10-11 11:44:59

巴巴鲁 发表于 2020-10-10 16:15
其实你大方面没有问题,注意一下函数名
我再试试可不可以头插和尾插一起用

你好,你学Java吗,在安装jdk时候遇到了一些问题,想请教一下。

巴巴鲁 发表于 2020-10-11 12:02:05

愷龍 发表于 2020-10-11 11:44
你好,你学Java吗,在安装jdk时候遇到了一些问题,想请教一下。

参考:https://blog.csdn.net/weixin_44084189/article/details/98966787

愷龍 发表于 2020-10-11 14:00:32

巴巴鲁 发表于 2020-10-11 12:02
参考:https://blog.csdn.net/weixin_44084189/article/details/98966787

我尝试很多次,jdk版本也换了很多次,主要是每次都这样,我找了好多教程,但是都不成功看图https://pic.downk.cc/item/5f829f641cd1bbb86b30c4da.jpg

愷龍 发表于 2020-10-11 14:04:40

巴巴鲁 发表于 2020-10-11 12:02
参考:https://blog.csdn.net/weixin_44084189/article/details/98966787

主要是每次我都安装失败(如图)jdk版本我也换了很多,我换了个新电脑就一直安装不成功,之前的电脑直接就能安装成功,教程我也看了很多,希望能得到更多帮助。
https://pic.downk.cc/item/5f829f641cd1bbb86b30c4da.jpg

愷龍 发表于 2020-10-11 14:07:03

愷龍 发表于 2020-10-11 14:04
主要是每次我都安装失败(如图)jdk版本我也换了很多,我换了个新电脑就一直安装不成功,之前的电脑直接 ...

之前图片不能加载,请看这个https://i1.100024.xyz/i/2020/10/11/n9bv0o.jpg
页: [1] 2
查看完整版本: 为什么能编译但是仍然有报错?