
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);
}
然后运行就死了
怎么办~~
各位老师救我啊~~
拜托了~~ 展开
题目:
以下是程序建立一个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);
}
然后运行就死了
怎么办~~
各位老师救我啊~~
拜托了~~ 展开
展开全部
错误多,要好好练习哦~
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、关于释放内存不是什么问题,不想释放也可以。因为程序执行结束后系统会自动释放所用的内存。
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、关于释放内存不是什么问题,不想释放也可以。因为程序执行结束后系统会自动释放所用的内存。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询