C语言写的链表。明明没有错误,为什么编译器还会报错,?而且还爆出100+的错误,求解。

太长没有办法发过来,
http://tieba.baidu.com/p/2077544469
百度贴把的连接
最新回答
踮起脚╮亲伱

2024-05-31 14:26:27

就是前面和后面有点问题,直接用下面的替换掉对应的部分就行了。
你去私信里复制代码吧,私信里复制粘贴后不是一整行。

#include<malloc.h>
#include<stdio.h>
#include<stdlib.h>
/*-----------------------------------数据类型定义----------------------------------------*/
typedef struct node
{
int data; //链表结构,链表的数据域
struct node *next; //链表的结构,链表的指针域
}LINKLIST;
LINKLIST * set(); //声明将要用到的建立链表的函数
void insert(LINKLIST*); //这里声明了一个插入添加数据的函数!!!声明一个带有参数的函数的时候记得传递参数!
void output(LINKLIST*); //声明一个输出函数
void del(LINKLIST*); //删除一个数据的声明
void alter(LINKLIST*); //修改一个结点的数据
void select(LINKLIST*); //查询某个位置的数据
void select1(LINKLIST*); //高级查询,查询数据所在的位置
/*------------------------------------主函数----------------------------------------*/
void main() //主函数
...............................
...............................
...............................
...............................
/*---------------------------------------------查询某个结点在哪几个位置上出现---------------------------------------------*/
void select1(LINKLIST *SQ)
{
LINKLIST *q;
LINKLIST *p;
q = (LINKLIST*)malloc(sizeof(LINKLIST));
p = (LINKLIST*)malloc(sizeof(LINKLIST));
p->data = -1;
q = p;
printf("Please input the query node data:");
int data;
// int sum[100];
// sum[0] = -1;
scanf("%d",&data);
for(int i = 1,j = 0;SQ->data!=NULL;i++) //如果SQ不是空的则一直检索下去
{
if(SQ->data == data) //如果检索到相同的就将这个结点的位置保存到sum数组中。
{
q->data = i;
q = q->next;
//sum[j+1] = sum[j];
//sum[j] = i;
//j++; } SQ = SQ->next; }
if(p->data == -1) //如果检索完之后sum[0]还是-1那么就输出没有找到
{

printf("Did not find the same data");
}
else //否则输出数据
{
while(p->data!=NULL)
{
printf("%d",p->data);
p = p->next;
}
//int j =1;
//while(sum[0]!=-1)
//{
// printf("%d\t",sum[j]);
// j++;
// }
}
}
}
}
/*------------------------------------定义插入结点链表函数----------------------------------------*/
LINKLIST *set() //定义插入结点链表函数
{
printf("please input the integer to inster :\n");
/*Q 是用来返回的头结点,P用来新建结点,Prep用来设置表尾结点。Prep*/
LINKLIST *P,*Q,*Prep;

int x = 0;
Q = (LINKLIST*)malloc(sizeof(LINKLIST)); //为要输入的链表指针定义空间。
Q->data = -1;
Q->next = NULL;
Prep = Q; //把Q给了Prep Q依旧是头结点,以后输入每一次都给Prep赋值。 scanf("%d",&x); //输入要插入的数值。
while(x!=-1)
{
P = (LINKLIST *)malloc(sizeof(LINKLIST));
P->data = x; //使用P作为一个中转链结点,
P->next = NULL;
Prep->next = P; //链表的最后一个结点的后一个结点为P
Prep = Prep->next; //保证Prep一直是最后。因为每次插入表尾结点都是在最后。
scanf("%d",&x);
P = P->next; //这样的话可以随时释放临时的P结点,节约空间。
Prep->next = NULL; //结点的最后一个为空
}

free(P);
/*如果没有P = P->next;这里的P不可以释放。
因为当时P的值是给了Prep->next的。
又执行Prep = Prep->next 导致现在得P是链表中的最后一个结点。*/
return(Q);
}
追问
后一段也发下私信好吗?还有告诉我为什么好吗?那一段出了问题?

倒数第二个函数的大括号那不是刚刚好吗?
追答
不是,已经发了。选择一段代码,然后按Alt+F8,就会帮助对齐代码,这样看就比较清楚了。
追问
问题检查出来了。我用的是C编译的,一开始用的是C++,C++中变量的定义可以在语句的中间,而C却不可以,导致出现了现在的情况。
简单の┊爱゛

2024-05-31 09:43:40

会不会是编译器的版本不同啊 你写的是哪个版本的C语言
追问
一开始的时候编译好好的,就是这个代码,后来我想放到每个头文件一个函数,结果没弄好,我又把各个函数拷贝回来,当时没有做备份,然后就悲剧了,换了VS2008编译也不能。
我这里还有编译成功的exe文件可以运行呢