用c语言完成以下任务:动态建立一个长度为4的链表,用于存储学生的信息(姓名与学号),并输出;且实现插入与删除功能,所有功能通过写成函数来实现
时间: 2023-12-03 11:47:27 浏览: 72
C语言——建立一个链表表示学生的信息(学号、姓名、分数)
4星 · 用户满意度95%
以下是用C语言实现动态建立一个长度为4的链表,用于存储学生的信息(姓名与学号),并输出,以及实现插入与删除功能的代码。我将其封装成了函数,方便调用。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义链表节点结构体
typedef struct node {
char name[20]; // 学生姓名
int num; // 学生学号
struct node *next;
} Node;
// 建立链表函数
Node *createList() {
Node *head = NULL, *p, *q;
int i = 0;
for (i = 0; i < 4; i++) {
p = (Node *) malloc(sizeof(Node));
printf("请输入第%d个学生的姓名和学号:", i + 1);
scanf("%s %d", p->name, &p->num);
p->next = NULL;
if (head == NULL) {
head = p;
} else {
q->next = p;
}
q = p;
}
return head;
}
// 遍历链表函数
void traverseList(Node *head) {
Node *p = head;
while (p != NULL) {
printf("姓名:%s\t学号:%d\n", p->name, p->num);
p = p->next;
}
}
// 插入节点函数
Node *insertNode(Node *head) {
Node *p, *q;
p = (Node *) malloc(sizeof(Node));
printf("请输入要插入的学生的姓名和学号:");
scanf("%s %d", p->name, &p->num);
p->next = NULL;
if (head == NULL) {
head = p;
} else {
q = head;
while (q->next != NULL) {
q = q->next;
}
q->next = p;
}
return head;
}
// 删除节点函数
Node *deleteNode(Node *head) {
Node *p, *q;
int num;
printf("请输入要删除的学生的学号:");
scanf("%d", &num);
p = head;
q = NULL;
while (p != NULL) {
if (p->num == num) {
if (q == NULL) {
head = p->next;
} else {
q->next = p->next;
}
free(p);
printf("删除成功!\n");
break;
}
q = p;
p = p->next;
}
if (p == NULL) {
printf("未找到该学号的学生!\n");
}
return head;
}
// 主函数
int main() {
Node *head = NULL;
int choice;
while (1) {
printf("1. 建立链表;2. 遍历链表;3. 插入节点;4. 删除节点;5. 退出程序\n");
printf("请选择要执行的操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
head = createList();
break;
case 2:
traverseList(head);
break;
case 3:
head = insertNode(head);
break;
case 4:
head = deleteNode(head);
break;
case 5:
exit(0);
default:
printf("输入错误,请重新选择!\n");
break;
}
}
return 0;
}
```
使用方法:将以上代码保存为一个文件,例如 student.c,然后编译运行即可。在主菜单中选择要执行的操作即可完成相应的功能。
阅读全文