c语言链表题,这个程序错哪了? 很急。前辈们救救我吧。

是一道程序完善题。题目:以下是程序建立一个6个数据的链表,并进行数据查找,返回找到的节点地址。【#include<stdio.h>#include<malloc.h>ty... 是一道程序完善题。

题目:
以下是程序建立一个6个数据的链表,并进行数据查找,返回找到的节点地址。

【#include<stdio.h>
#include<malloc.h>

typedef struct Node{
float data;
struct Node *link;};】 注【】是我自己编的。//是完善的答案

struct Node *creat(){
struct Node *head,*p,*q;
int i;
for(i=0;i<6;i++){
p=(struct Node *)malloc(sizeof(struct Node));
scanf("%d",&p->data);
p->link=0;//
if(head==0) head=p;
else q->link=p;//
q=p;
}
return head;
}

void print(struct Node *head){
struct Node *p=head;//
while(p!=0){
printf("%d ",p->data);
p=p->link;//
}
putchar('\n');
}

struct Node *find(struct Node *head,int key){
struct Node *p=head;
while(p!=0&&p->data!=key)//
return p;
}

void main(){
struct Node *head,*pNode;
int k;
【void print(struct Node *head);】这里没有申明,我自己加的
head=creat();
print(head);
printf("intput an integer:");
scanf("%d",&k);
pNode=find(head,k);//
if(pNode==0)//
printf("%d is not in the link\n",k);
}

然后运行就死了

怎么办~~
各位老师救我啊~~
拜托了~~
展开
 我来答
jackdavid144
2010-06-24 · TA获得超过350个赞
知道小有建树答主
回答量:183
采纳率:0%
帮助的人:238万
展开全部
错误多,要好好练习哦~
1、结构体中的变量data是浮点型变量,而程序在读入和输出时均按整型数据处理,会出现打印出乱码,建议将float改为int或者将所有关于data的%d改成%f

2、creat()函数中指针变量head未进行初始化。应初始化为0。如果不进行初始化,不仅返回的head指针是一个随机值,而且程序执行过程中head根本就不会被赋值(因为很可能不为0是随机值),反而将还未分配空间的也是指向随机地址的变量q进行了修改。要知道随便改内存是非常危险的行为,不容易被系统拦截容易发生系统执行错误。

3、while(p!=0&&p->data!=key) return p;严重错误。第一遍循环还没结束就直接返回一个错误的值了。
应改为while(p!=0&&p->data!=key); return p;
这样才符合本意,等找到符合条件的数据再进行传回。这样while循环就是一个空循环体的循环结构了,完全合法。

4、关于释放内存不是什么问题,不想释放也可以。因为程序执行结束后系统会自动释放所用的内存。
BrotherAnt
2010-06-24 · TA获得超过154个赞
知道小有建树答主
回答量:127
采纳率:0%
帮助的人:130万
展开全部
第一个错,create函数中 head没有初始化。你应该把它初始化为0。
第二个错,你的结构体里data是float类型,怎么用%d格式来读入和输出阿,应该用%f。
第三个错,find函数,只返回第一个data和key不相等的指针。怎么写,你自己再好好看看吧。
第四个错,malloc得到的空间没有在适当的时候释放,会造成内存泄露哦!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式