有一链式结构,定义如下 : struct stu{ char name[20]; int no; struct stu *next; }; 创建一个函数create(),实现无头结点的链表,有m个结点,函数的返回值为链表的头指针。
时间: 2024-03-17 13:47:49 浏览: 75
下面是一个实现无头结点的链表,创建m个结点的create()函数的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct stu{
char name[20];
int no;
struct stu *next;
};
struct stu *create(int m){
struct stu *head, *p, *q;
int i;
head = NULL; // 初始化头指针为空指针
q = NULL;
for (i = 0; i < m; i++) {
p = (struct stu *)malloc(sizeof(struct stu)); // 分配结点空间
printf("请输入第%d个学生的姓名和学号:", i + 1);
scanf("%s %d", p->name, &p->no);
p->next = NULL; // 新结点的next指针指向NULL
if (head == NULL) { // 如果头指针为空
head = p; // 让头指针指向第一个结点
} else {
q->next = p; // 让上一个结点的next指针指向当前结点
}
q = p; // 让q指向当前结点,以便下一次循环使用
}
return head; // 返回链表头指针
}
int main(){
int m;
struct stu *head, *p;
printf("请输入链表的结点数:");
scanf("%d", &m);
head = create(m); // 调用create()函数,创建链表
printf("链表的内容为:\n");
p = head; // p指向链表的第一个结点
while (p != NULL) { // 遍历链表
printf("%s %d\n", p->name, p->no);
p = p->next; // p指向下一个结点
}
return 0;
}
```
在上面的示例代码中,首先定义了一个结构体`stu`,包括学生姓名、学号和指向下一个结点的指针。然后定义了一个create()函数,用于创建无头结点的链表,并返回链表的头指针。在create()函数中,使用了链表的尾插法来创建链表。最后在main()函数中使用链表的头指针遍历整个链表,并输出每个结点的内容。
阅读全文