利用c语言设计和实现线性链表的数据结构,实现线性表的初始化、插入、删除、查找操作,利用所实现的线性表存储学生及其成绩信息,利用线性表的基本操作实现学生成绩的插入保存查找和删除
时间: 2024-09-25 09:11:48 浏览: 44
数据结构C语言版-线性表的单链表存储结构表示和实现优质资料.doc
在C语言中,我们可以使用结构体定义一个节点来表示线性链表,并通过指针实现链表的操作。首先,我们创建一个`Student`结构体存储学生的姓名和成绩:
```c
typedef struct {
char name[50];
int score;
struct Node *next; // 指向下一个节点的指针
} Student, *ListNode;
```
然后我们需要定义链表的头节点:
```c
ListNode head = NULL; // 初始化为空
```
下面是链表的一些基本操作:
### 初始化(Insertion)
1. 初始化空链表:
```c
void initList() {
head = NULL;
}
```
### 插入(Insertion)
1. 在链表尾部插入新学生:
```c
void insertStudent(ListNode *head, const char *name, int score) {
ListNode *newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->name = name;
newNode->score = score;
newNode->next = NULL;
if(head == NULL) {
head = newNode;
} else {
ListNode *current = head;
while(current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
}
```
### 删除(Deletion)
1. 删除指定学生:
```c
void deleteStudent(const char* name) {
ListNode *prev = NULL, *current = head;
while(current != NULL && strcmp(current->name, name) != 0) {
prev = current;
current = current->next;
}
if(current != NULL) {
if(prev == NULL) { // 如果要删除的是头节点
head = current->next;
} else {
prev->next = current->next;
}
free(current);
}
}
```
### 查找(Search)
1. 查找特定学生并返回其索引:
```c
int searchStudent(const char* name) {
ListNode *current = head;
int index = 0;
while(current != NULL) {
if(strcmp(current->name, name) == 0) {
return index;
}
index++;
current = current->next;
}
return -1; // 表示未找到
}
```
### 存储和读取(Saving and Retrieving Scores)
1. 保存学生分数:
```c
void saveScore(char *name, int score) {
insertStudent(&head, name, score);
}
```
1. 查找并打印学生分数:
```c
void printStudentScores() {
ListNode *current = head;
while(current != NULL) {
printf("%s's Score: %d\n", current->name, current->score);
current = current->next;
}
}
```
阅读全文