C语言使用链表管理学生基本信息,结构体成员可根据实际情况自行定义,要求能实现以下功能: 1)创建新链表。 2)在链表中插入元素。 3)在链表中删除元素。 4)在链表中查找元素。 5)倒置链表。
时间: 2024-09-06 09:07:49 浏览: 166
C语言程序设计实训 基于链表的学生信息管理系统
在C语言中,我们可以使用链表数据结构来管理学生的基本信息。首先,我们需要定义一个包含学生基本信息的结构体,例如`Student`:
```c
typedef struct {
char name[50];
int age;
float score; // 分数或其他相关属性
struct Student* next; // 指向下一个学生的指针,构成单链表
} Student;
```
接下来,我们分别实现各个功能:
1. **创建新链表(Create a new list)**:
```c
Student* createList() {
return (Student*)malloc(sizeof(Student)); // 创建一个新的节点并分配内存
// 初始化next指针为空
return NULL;
}
```
2. **在链表中插入元素(Insert an element)**:
```c
void insert(Student* head, char name[], int age, float score) {
Student* newNode = (Student*)malloc(sizeof(Student));
strcpy(newNode->name, name);
newNode->age = age;
newNode->score = score;
newNode->next = head;
head = newNode;
}
```
3. **在链表中删除元素(Delete an element)**:
```c
void deleteElement(Student** head, char targetName[]) {
Student* temp = *head, *prev = NULL;
while (temp != NULL && strcmp(temp->name, targetName) != 0) {
prev = temp;
temp = temp->next;
}
if (temp == NULL) return; // 如果没找到目标,不做处理
if (prev == NULL) *head = temp->next; // 链头节点被删除
else prev->next = temp->next;
free(temp); // 释放已删除节点的内存
}
```
4. **在链表中查找元素(Search for an element)**:
```c
Student* search(Student* head, char targetName[]) {
while (head != NULL) {
if (strcmp(head->name, targetName) == 0) return head;
head = head->next;
}
return NULL; // 如果未找到,返回NULL
}
```
5. **倒置链表(Reverse the list)**:
```c
void reverseList(Student** head) {
Student* prev = NULL, *current = *head, *next = NULL;
while (current != NULL) {
next = current->next;
current->next = prev;
prev = current;
current = next;
}
*head = prev; // 更新链表头指向新的开始位置
}
```
阅读全文