C语言链表问题
以下程序错在哪里(组建的时候错误。编译的时候没错误)
#include <stdlib.h> ///包*含ma l l o c ( ) 的头文件*/
#include <stdio.h>
struct NOTE ///链表节点的结构
{
int num;
struct NOTE *next;
} ;
void main( )
{
struct NOTE *creat(); /// *函数声明* /
void print();
struct NOTE *head; /// * 定义头指针* /
head=NULL;/*建一个空表*/
head=creat();/*创建单链表*/
print();/*打印单链表*/
}
/******************************************/
struct NOTE *creat(struct NOTE *head)//函/数*返回的是与节点相同类型的指针*/
{
struct NOTE*p1,*p2;
p1=p2=(struct NOTE*)malloc(sizeof(struct NOTE));//申请/*新节点*/
scanf("%d",&p1->num);/*输入节点的值*/
p1->next=NULL;/*将新节点的指针置为空*/
while(p1->num>0)/*输入节点的数值大于0*/
{
if(head==NULL)
head=p1;/*空表,接入表头*/
else
p2->next=p1;/*非空表,接到表尾*/
p2=p1;
p1=(struct NOTE*)malloc(sizeof(struct NOTE));//申/请*下一个新节点*/
scanf("%d",&p1->num);/*输入节点的值*/
}
return head;/*返回链表的头指针*/
}
/*******************************************/
void print(struct NOTE*head)//输/*出以head为头的链表各节点的值*/
{
struct NOTE *temp;
temp=head;/*取得链表的头指针*/
while(temp!=NULL)/*只要是非空表*/
{
printf("%6d",temp->num);/*输出链表节点的值*/
temp=temp->next;/*跟踪链表增长*/
}
}
追问:你能不能在这个链表中再增加两个功能。就是删除和查找的功能。
积分不是问题。我追加悬赏。
谢谢。
答案:#include <stdlib.h>
#include <stdio.h>struct NOTE
{
int num;
struct NOTE *next;
} ;
//下面申明
struct NOTE *creat(struct NOTE *);
void print(struct NOTE*);
int main( )
{
//主函数内不要申明,应该在前面申明
struct NOTE *head;
head=NULL;
head=creat(head);
print(head);
}
/******************************************/
struct NOTE * creat(struct NOTE *head)
{
struct NOTE*p1,*p2;
p1=p2=(struct NOTE*)malloc(sizeof(struct NOTE));
scanf("%d,",&p1->num);//输入用逗号隔开
p1->next=NULL;
while(p1->num>0)
{
if(head==NULL)
head=p1;
else
p2->next=p1;
p2=p1;
p1->next=NULL;//尾指针为空
p1=(struct NOTE*)malloc(sizeof(struct NOTE));
scanf("%d,",&p1->num);
}
return head;
}
/*******************************************/
void print(struct NOTE*head)
{
struct NOTE *temp;
temp=head;
while(temp!=NULL)
{
printf("%6d",temp->num);
temp=temp->next;
}
}
你的函数声明和函数定义的参数不相符合。
struct NOTE *creat(); /// *函数声明* /
struct NOTE *creat(struct NOTE *head)//函/数*返回的是与节点相同类型的指针*/
这样就没有错误了。你的函数声明要放在main函数外面!!
#include <stdlib.h> ///包*含ma l l o c ( ) 的头文件*/
#include <stdio.h>
struct NOTE ///链表节点的结
{
int num;
struct NOTE* next;
} ;
void print(struct NOTE* head)//输/*出以head为头的链表各节点的值*/
{
struct NOTE* temp;
temp = head;/*取得链表的头指针*/
while (temp != NULL)/*只要是非空表*/
{
printf("%6d", temp->num);/*输出链表节点的值*/
temp = temp->next;/*跟踪链表增长*/
}
}
struct NOTE* creat(struct NOTE* head)//函/数*返回的是与节点相同类型的指针*/
{
struct NOTE* p1, * p2;
p1 = p2 = (struct NOTE *) malloc(sizeof(struct NOTE));//申请/*新节点*/
scanf("%d", &p1->num);/*输入节点的值*/
p1->next = NULL;/*将新节点的指针置为空*/
while (p1->num > 0)/*输入节点的数值大于0*/
{
if (head == NULL)
{
head = p1;
}/*空表,接入表头*/
else
{
p2->next = p1;
}/*非空表,接到表尾*/
p2 = p1;
p1 = (struct NOTE *) malloc(sizeof(struct NOTE));//申/请*下一个新节点*/
scanf("%d", &p1->num);/*输入节点的值*/
}
return head;/*返回链表的头指针*/
}
/*******************************************/
void main()
{
struct NOTE* head; /// * 定义头指针* /
head = NULL;/*建一个空表*/
head = creat(head);/*创建单链表*/
print(head);/*打印单链表*/
}
/******************************************/
上一个:C语言怎么学?
下一个:C语言一维数组排序