用C语言实现:1.构造学生信息链表,学生信息应包括姓名和年龄(链表初始化)char name(20) ;int age 2.根据自己的需要建立链表添加学生信息,学生信息不得少于3条(建立链表:头插法或者尾插法皆可) 3.打印出所有学生的信息(遍历),并统计学生人数(求链表长度) 4.在第二个位置插入一个学生信息,姓名为Tom,年龄为10(链表插入),并打印出插入后的学生信息表(遍历) 5.查找年龄为10的学生,打印其姓名(按值查找) 6.删除第二个学生的信息(删除),打印删除后的学生信息表(遍历)
时间: 2023-12-30 13:02:11 浏览: 119
以下是用C语言实现上述要求的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生信息结构体
struct student {
char name[20];
int age;
struct student *next;
};
// 头插法构造链表
struct student* createList() {
int n = 3; // 学生数量
struct student *head, *p;
head = NULL;
printf("请输入%d个学生的信息:\n", n);
for (int i = 1; i <= n; i++) {
p = (struct student*)malloc(sizeof(struct student));
scanf("%s%d", p->name, &p->age);
p->next = head;
head = p;
}
return head;
}
// 遍历链表,打印所有学生信息
void printList(struct student *head) {
int count = 0; // 统计学生人数
struct student *p = head;
while (p != NULL) {
count++;
printf("姓名:%s,年龄:%d\n", p->name, p->age);
p = p->next;
}
printf("学生人数为:%d\n", count);
}
// 在第二个位置插入一个学生信息
void insertList(struct student *head) {
struct student *p, *q;
p = (struct student*)malloc(sizeof(struct student));
strcpy(p->name, "Tom");
p->age = 10;
q = head;
for (int i = 1; i < 2 && q != NULL; i++) {
q = q->next;
}
p->next = q->next;
q->next = p;
}
// 按值查找年龄为10的学生
void searchList(struct student *head) {
struct student *p = head;
while (p != NULL) {
if (p->age == 10) {
printf("年龄为10的学生姓名为:%s\n", p->name);
return;
}
p = p->next;
}
printf("没有找到年龄为10的学生!\n");
}
// 删除第二个学生的信息
void deleteList(struct student *head) {
struct student *p, *q;
p = head;
q = p->next;
p->next = q->next;
free(q);
}
int main() {
struct student *head = createList(); // 构造链表
printf("学生信息如下:\n");
printList(head); // 遍历链表,打印所有学生信息
insertList(head); // 在第二个位置插入一个学生信息
printf("插入学生后,学生信息如下:\n");
printList(head); // 遍历链表,打印所有学生信息
searchList(head); // 按值查找年龄为10的学生
deleteList(head); // 删除第二个学生的信息
printf("删除学生后,学生信息如下:\n");
printList(head); // 遍历链表,打印所有学生信息
return 0;
}
```
注意,以上代码是用头插法构造链表,因此在插入和删除节点时需要注意顺序。如果使用尾插法构造链表,则插入和删除节点的顺序将会不同。
阅读全文