c语言:完成顺序表操作的如下函数:建立,初始化,插入,删除,合并。顺序表能够存储10名学生的基本信息(包括姓名、学号和成绩)
时间: 2024-09-25 20:03:13 浏览: 22
在C语言中,你可以使用数组结构来实现顺序表,这里我会为你提供基本的函数原型和功能描述。由于代码量较大,这里只给出核心函数的定义,完整的实现会包含更多的细节。
```c
#include <stdio.h>
#include <string.h>
// 定义结构体表示学生信息
typedef struct {
char name[50];
int student_id;
float score;
} Student;
// 功能:创建并初始化顺序表
Student* create_list(int capacity) {
if (capacity <= 0) return NULL;
Student* list = (Student*)malloc(capacity * sizeof(Student));
for (int i = 0; i < capacity; i++) {
list[i].name[0] = '\0'; // 初始化名字为空字符串
list[i].student_id = 0;
list[i].score = 0.0;
}
return list;
}
// 功能:插入学生信息
void insert(Student** list, int index, const Student* new_student) {
if (index < 0 || index >= (*list)->num_students) return;
memmove(&(*list)[index + 1], &(*list)[index], sizeof(Student) * ((*list)->num_students - index));
memcpy(&(*list)[index], new_student, sizeof(Student));
(*list)->num_students++;
}
// 功能:删除学生信息
void delete(Student** list, int index) {
if (index < 0 || index >= (*list)->num_students) return;
memmove(&(*list)[index], &(*list)[index + 1], sizeof(Student) * ((*list)->num_students - index - 1));
(*list)->num_students--;
}
// 功能:合并两个顺序表
void merge(Student** list1, Student** list2, int len1, int len2) {
if (!list2 || len2 == 0) return;
Student* merged = create_list(len1 + len2);
for (int i = 0; i < len1; i++)
memcpy(merged + i, list1[i], sizeof(Student));
for (int i = 0; i < len2; i++)
memcpy(merged + len1 + i, list2[i], sizeof(Student));
free(*list1);
free(*list2);
*list1 = merged;
}
// 列表属性(假设有一个成员变量 num_students 记录当前元素数)
typedef struct {
int num_students;
Student students[];
} List;
// 使用示例:
List* my_list = create_list(10); // 创建列表
insert(&my_list, 0, {"张三", 1001, 90.0}); // 插入学生
// ...其他操作...
delete(&my_list, 2); // 删除指定位置的学生
List* other_list = create_list(5); // 创建另一个列表
merge(&my_list, &other_list, my_list->num_students, other_list->num_students); // 合并
//