按照输入的顺序建立一个链表,每个节点包括:学号、姓名、性别、年龄。直到输入的学号为-1结束。然后输出此链表。然后从键盘上输入一个学生的学号,把此学生的节点删除后再输出链表。(要求建立链表、删除用函数)
时间: 2024-02-12 20:07:11 浏览: 35
C语言:定义一个包含学生信息(学号,姓名,成绩)的顺序表和链表.zip
5星 · 资源好评率100%
好的,我可以帮你解决这个问题。以下是示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义链表节点结构体
typedef struct student {
int id; // 学号
char name[20]; // 姓名
char gender[10]; // 性别
int age; // 年龄
struct student *next; // 指向下一个节点的指针
} student_t;
// 创建链表节点
student_t *create_node(int id, const char *name, const char *gender, int age) {
student_t *node = (student_t *)malloc(sizeof(student_t));
node->id = id;
strcpy(node->name, name);
strcpy(node->gender, gender);
node->age = age;
node->next = NULL;
return node;
}
// 插入节点到链表末尾
void insert_node(student_t **head, student_t *node) {
if (*head == NULL) {
*head = node;
} else {
student_t *p = *head;
while (p->next != NULL) {
p = p->next;
}
p->next = node;
}
}
// 从链表中删除指定学号的节点
void delete_node(student_t **head, int id) {
if (*head == NULL) {
return;
}
student_t *p = *head;
if (p->id == id) {
*head = p->next;
free(p);
return;
}
while (p->next != NULL && p->next->id != id) {
p = p->next;
}
if (p->next != NULL) {
student_t *del = p->next;
p->next = del->next;
free(del);
}
}
// 输出链表
void print_list(student_t *head) {
if (head == NULL) {
printf("链表为空!\n");
} else {
printf("学号\t姓名\t性别\t年龄\n");
student_t *p = head;
while (p != NULL) {
printf("%d\t%s\t%s\t%d\n", p->id, p->name, p->gender, p->age);
p = p->next;
}
}
}
int main() {
student_t *head = NULL;
int id, age;
char name[20], gender[10];
printf("请输入学生信息(学号、姓名、性别、年龄),以-1结束:\n");
while (1) {
scanf("%d", &id);
if (id == -1) {
break;
}
scanf("%s%s%d", name, gender, &age);
student_t *node = create_node(id, name, gender, age);
insert_node(&head, node);
}
printf("链表为:\n");
print_list(head);
printf("请输入要删除的学生的学号:\n");
scanf("%d", &id);
delete_node(&head, id);
printf("删除后的链表为:\n");
print_list(head);
return 0;
}
```
你可以将代码复制到本地编译运行,输入学生信息后即可得到链表,并删除指定学号的节点后再输出链表。
阅读全文