2.建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。要求运行界面如下所示(具体测试用例请考虑周全):
时间: 2024-04-04 17:32:43 浏览: 110
好的,这是一个关于链表的问题,需要建立一个链表,每个结点包括学号、姓名、性别、年龄。同时需要输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删除。下面是一个示例的运行界面:
请输入学生信息,输入-1结束输入:
学号:1001
姓名:张三
性别:男
年龄:20
学号:1002
姓名:李四
性别:女
年龄:19
学号:1003
姓名:王五
性别:男
年龄:20
学号:-1
请输入待删除的年龄:
20
删除成功!删除后的链表为:
学号:1002
姓名:李四
性别:女
年龄:19
请问是否还需要继续删除?(Y/N):Y
请输入待删除的年龄:
19
删除成功!删除后的链表为:
暂无学生信息。
请问是否还需要继续删除?(Y/N):N
程序结束。
相关问题
2.建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。代码
以下是基于C语言的链表实现,实现了链表的插入、遍历和根据年龄删除结点的功能。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义链表结构体
struct student {
int id;
char name[20];
char gender;
int age;
struct student *next;
};
// 插入结点
struct student *insert(struct student *head, int id, char *name, char gender, int age) {
struct student *p = (struct student *)malloc(sizeof(struct student));
p->id = id;
strcpy(p->name, name);
p->gender = gender;
p->age = age;
p->next = head;
head = p;
return head;
}
// 遍历链表
void traverse(struct student *head) {
struct student *p = head;
while (p != NULL) {
printf("id: %d, name: %s, gender: %c, age: %d\n", p->id, p->name, p->gender, p->age);
p = p->next;
}
}
// 根据年龄删除结点
struct student *delete_by_age(struct student *head, int age) {
struct student *p = head;
struct student *pre = NULL;
while (p != NULL) {
if (p->age == age) {
if (pre == NULL) {
head = p->next;
} else {
pre->next = p->next;
}
free(p);
p = (pre == NULL ? head : pre->next);
} else {
pre = p;
p = p->next;
}
}
return head;
}
int main() {
struct student *head = NULL;
head = insert(head, 1, "Alice", 'F', 18);
head = insert(head, 2, "Bob", 'M', 18);
head = insert(head, 3, "Charlie", 'M', 20);
head = insert(head, 4, "David", 'M', 19);
printf("Before delete:\n");
traverse(head);
head = delete_by_age(head, 18);
printf("After delete:\n");
traverse(head);
return 0;
}
```
代码中定义了一个 `student` 结构体,包含学号、姓名、性别和年龄四个成员变量,以及一个指向下一个结点的指针。通过 `insert` 函数实现链表结点的插入,通过 `traverse` 函数实现链表的遍历,通过 `delete_by_age` 函数实现根据年龄删除结点的功能。在主函数中,首先插入了四个结点,然后遍历了链表,接着根据年龄删除了年龄为 18 的结点,最后再次遍历链表,验证了删除操作的正确性。
c语言建立一个链表,每个结点包括姓名和成绩,c语言编程题,程序功能: 建立一个链表,每个结点包括:学号、姓名、性别、年龄,输入一个学号,如果链表中...
好的,这是一个比较复杂的问题,需要较长的代码实现。以下是一个简单的实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义链表节点结构体
typedef struct student {
int id;
char name[20];
int score;
struct student* next;
} Student;
// 定义链表头指针
Student* head = NULL;
// 插入节点函数
void insertNode(int id, char name[], int score) {
Student* newNode = (Student*)malloc(sizeof(Student));
newNode->id = id;
strcpy(newNode->name, name);
newNode->score = score;
newNode->next = NULL;
if (head == NULL) {
head = newNode;
} else {
Student* current = head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
}
// 查找节点函数
Student* findNode(int id) {
Student* current = head;
while (current != NULL) {
if (current->id == id) {
return current;
}
current = current->next;
}
return NULL;
}
// 输出链表函数
void printList() {
Student* current = head;
while (current != NULL) {
printf("id: %d, name: %s, score: %d\n", current->id, current->name, current->score);
current = current->next;
}
}
int main() {
// 插入节点
insertNode(1, "Tom", 90);
insertNode(2, "Jerry", 80);
insertNode(3, "Lucy", 70);
// 查找节点并输出结果
int id;
printf("Enter student id to search: ");
scanf("%d", &id);
Student* node = findNode(id);
if (node != NULL) {
printf("id: %d, name: %s, score: %d\n", node->id, node->name, node->score);
} else {
printf("Student not found.\n");
}
// 输出链表
printList();
return 0;
}
```
这个程序会创建一个链表,每个节点包括学号、姓名和成绩。它还会提示用户输入一个学号,然后查找链表中是否有对应的节点,并输出其姓名和成绩。最后,它会输出整个链表的内容。
阅读全文