C语言:创建和输出链表 函数create()的功能是:建立动态链表,返回链表头指针head,要求从键盘输入各结点的数据,当输入值为0时停止结点的建立。print函数输出链表head中各个结点的data值。请将create函数和print函数补充完整。 输入格式: 在一行输入结点数据,以空格间隔,最后一个输入0,代表输入结束(0不成为新的结点)。 输出格式: 输出链表的每个结点的数据域,每个数据后有一个空格,最后换行,注意,如为空链表,输出就是一个换行
时间: 2024-02-21 14:02:20 浏览: 136
下面是create()和print()函数的完整代码:
```c
#include <stdio.h>
#include <stdlib.h>
//定义链表结构体
typedef struct node
{
int data;
struct node* next;
}Node,*pNode;
//创建链表函数
pNode create()
{
int num;
pNode head = NULL, p = NULL, tail = NULL;
printf("请输入链表中的每个节点数据(以空格间隔,以0结束):\n");
while(1)
{
scanf("%d", &num);
if(num == 0)
{
break;
}
else
{
p = (pNode)malloc(sizeof(Node));
if(p == NULL)
{
printf("内存分配失败\n");
exit(-1);
}
p->data = num;
p->next = NULL;
if(head == NULL)
{
head = p;
tail = p;
}
else
{
tail->next = p;
tail = p;
}
}
}
return head;
}
//输出链表函数
void print(pNode head)
{
if(head == NULL)
{
printf("\n");
return;
}
pNode p = head;
while(p)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main()
{
pNode head = NULL;
head = create();
printf("链表中的数据为:");
print(head);
return 0;
}
```
在这段代码中,我们定义了一个链表结构体Node,其中包含数据域data和指向下一个结点的指针next。然后我们定义了create()函数,用于创建链表。在这个函数中,我们先定义了三个指针变量head、p和tail,其中head用于记录链表的头结点,p用于指向新建立的结点,tail用于指向链表的尾结点。然后我们通过while循环不断从键盘输入结点的数据,当输入的数据为0时,表示输入结束,结束循环。否则我们就新建立一个结点p,并将输入的数据num存入p的数据域中。如果head为NULL,说明这是第一个结点,我们将head和tail都指向p。否则,我们将p添加到链表末尾,即将tail的next指针指向p,然后令tail指向p。最后返回链表头指针head。
接下来我们定义了print()函数,用于输出链表中各个结点的数据域。如果链表为空,我们就直接输出一个换行符。否则,我们从头结点开始遍历链表,将每个结点的数据域输出,并将指针p指向下一个结点,直到链表遍历结束。
在main函数中,我们先定义了一个链表头指针head,并将它初始化为NULL。然后调用create()函数创建链表,并将返回的链表头指针赋值给head。最后调用print()函数输出链表中的数据。
阅读全文