C语言 建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。
时间: 2023-06-20 21:09:39 浏览: 227
输入年龄,若和链表内节点相同,删除该节点
以下是基于C语言的实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义链表结构体
struct Student {
int id;
char name[20];
char gender[5];
int age;
struct Student *next;
};
// 创建链表
struct Student *createList(int n) {
struct Student *head, *p, *q;
int i;
// 初始化头结点
head = (struct Student *)malloc(sizeof(struct Student));
head->next = NULL;
// 依次创建链表结点
q = head;
for(i = 0; i < n; i++) {
p = (struct Student *)malloc(sizeof(struct Student));
printf("请输入第%d个学生的信息:\n", i + 1);
printf("学号:");
scanf("%d", &p->id);
printf("姓名:");
scanf("%s", p->name);
printf("性别:");
scanf("%s", p->gender);
printf("年龄:");
scanf("%d", &p->age);
p->next = NULL;
q->next = p;
q = p;
}
return head;
}
// 删除链表结点
struct Student *deleteNode(struct Student *head, int age) {
struct Student *p, *q;
p = head->next;
q = head;
while(p) {
if(p->age == age) {
q->next = p->next;
free(p);
p = q->next;
} else {
q = p;
p = p->next;
}
}
return head;
}
// 打印链表
void printList(struct Student *head) {
struct Student *p;
p = head->next;
while(p) {
printf("%d\t%s\t%s\t%d\n", p->id, p->name, p->gender, p->age);
p = p->next;
}
}
int main() {
struct Student *head;
int n, age;
printf("请输入学生人数:");
scanf("%d", &n);
head = createList(n);
printf("请输入要删除的年龄:");
scanf("%d", &age);
head = deleteNode(head, age);
printf("删除后的学生信息:\n");
printList(head);
return 0;
}
```
代码中,我们定义了一个 `Student` 结构体来存储每个学生的信息,并在 `createList` 函数中创建链表。在 `deleteNode` 函数中,我们遍历链表,找到年龄等于输入年龄的结点,并删除它。最后,在 `main` 函数中,我们调用了 `createList` 和 `deleteNode` 函数,并打印了删除后的链表。
阅读全文