当前位置:编程学习 > C/C++ >>

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语言一维数组排序

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,