C语言顺序表学生管理系统合并顺序表
时间: 2023-05-30 21:03:11 浏览: 112
以下是C语言顺序表学生管理系统合并顺序表的示例代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100
typedef struct {
int id;
char name[20];
int score;
} Student;
typedef struct {
Student *data;
int length;
} SeqList;
void init(SeqList *list) {
list->data = (Student *) malloc(MAX_SIZE * sizeof(Student));
list->length = 0;
}
void add(SeqList *list, Student stu) {
if (list->length >= MAX_SIZE) {
printf("List is full.\n");
return;
}
list->data[list->length++] = stu;
}
void print(SeqList list) {
printf("ID\tName\tScore\n");
for (int i = 0; i < list.length; i++) {
printf("%d\t%s\t%d\n", list.data[i].id, list.data[i].name, list.data[i].score);
}
}
void merge(SeqList *list1, SeqList *list2, SeqList *result) {
int i = 0, j = 0, k = 0;
while (i < list1->length && j < list2->length) {
if (list1->data[i].id < list2->data[j].id) {
result->data[k++] = list1->data[i++];
} else {
result->data[k++] = list2->data[j++];
}
}
while (i < list1->length) {
result->data[k++] = list1->data[i++];
}
while (j < list2->length) {
result->data[k++] = list2->data[j++];
}
result->length = k;
}
int main() {
SeqList list1, list2, result;
Student stu;
init(&list1);
init(&list2);
init(&result);
// add students to list 1
stu.id = 1;
strcpy(stu.name, "Alice");
stu.score = 90;
add(&list1, stu);
stu.id = 3;
strcpy(stu.name, "Bob");
stu.score = 80;
add(&list1, stu);
stu.id = 5;
strcpy(stu.name, "Charlie");
stu.score = 70;
add(&list1, stu);
// add students to list 2
stu.id = 2;
strcpy(stu.name, "David");
stu.score = 85;
add(&list2, stu);
stu.id = 4;
strcpy(stu.name, "Emily");
stu.score = 75;
add(&list2, stu);
// merge list 1 and list 2 to result
merge(&list1, &list2, &result);
// print result
printf("Merged list:\n");
print(result);
return 0;
}
```
在上面的示例代码中,我们定义了一个 `SeqList` 结构体,其中包含一个 `Student` 结构体数组和一个整型变量 `length`,用来记录数组中元素的数量。我们使用 `init` 函数初始化顺序表,使用 `add` 函数往顺序表中添加元素,使用 `print` 函数打印顺序表中的元素。
我们还定义了一个 `merge` 函数,用来合并两个顺序表。在函数中,我们使用三个指针 `i`、`j` 和 `k` 分别指向两个顺序表和合并后的顺序表中的元素。然后,我们依次比较两个顺序表中的元素,将较小的元素添加到合并后的顺序表中,直到其中一个顺序表中的元素全部添加完毕。最后,我们将剩余的元素添加到合并后的顺序表中,并设置其长度。
在 `main` 函数中,我们分别创建了两个顺序表 `list1` 和 `list2`,并往其中添加了学生信息。然后,我们创建了一个空的顺序表 `result`,并调用 `merge` 函数将 `list1` 和 `list2` 合并到 `result` 中。最后,我们使用 `print` 函数打印了合并后的顺序表中的元素。
阅读全文