使用C语言编写1.构造学生信息链表,学生信息应包括姓名和年龄(链表初始化) 2.根据自己的需要建立链表添加学生信息,学生信息不得少于3条(建立链表:头插法或者尾插法皆可) 3.打印出所有学生的信息(遍历),并统计学生人数(求链表长度) 4.在第二个位置插入一个学生信息,姓名为Tom,年龄为10(链表插入),并打印出插入后的学生信息表(遍历) 5.查找年龄为10的学生,打印其姓名(按值查找) 6.删除第二个学生的信息(删除),打印删除后的学生信息表
时间: 2024-01-25 16:02:42 浏览: 69
好的,以下是用 C 语言编写的代码实现:
```
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
// 定义学生信息结构体
typedef struct student {
char name[20];
int age;
struct student *next;
} Student;
// 初始化链表
Student *initList() {
Student *head = (Student *)malloc(sizeof(Student));
head->next = NULL;
return head;
}
// 头插法建立链表
void createListHead(Student *head, int n) {
int i;
Student *p;
for(i = 0; i < n; i++) {
p = (Student *)malloc(sizeof(Student));
printf("请输入第%d个学生的姓名和年龄:", i+1);
scanf("%s %d", p->name, &p->age);
p->next = head->next;
head->next = p;
}
}
// 遍历链表并打印学生信息
void traverseList(Student *head) {
Student *p = head->next;
int count = 0;
printf("学生信息如下:\n");
while(p != NULL) {
printf("姓名:%s,年龄:%d\n", p->name, p->age);
p = p->next;
count++;
}
printf("学生总人数为:%d\n", count);
}
// 在第二个位置插入一个学生信息
void insertList(Student *head, char *name, int age) {
Student *p = head->next;
Student *q = (Student *)malloc(sizeof(Student));
strcpy(q->name, name);
q->age = age;
q->next = p->next;
p->next = q;
}
// 按值查找学生信息
void searchList(Student *head, int age) {
Student *p = head->next;
while(p != NULL) {
if(p->age == age) {
printf("年龄为%d的学生姓名为:%s\n", age, p->name);
return;
}
p = p->next;
}
printf("没有找到年龄为%d的学生信息\n", age);
}
// 删除第二个学生的信息
void deleteList(Student *head) {
Student *p = head->next;
if(p == NULL || p->next == NULL) {
printf("链表为空或只有一个学生信息,无法删除\n");
return;
}
head->next = p->next;
free(p);
}
int main() {
int n = 3;
Student *head = initList();
createListHead(head, n);
traverseList(head);
char name[] = "Tom";
int age = 10;
insertList(head, name, age);
traverseList(head);
searchList(head, age);
deleteList(head);
traverseList(head);
return 0;
}
```
阅读全文