帮我生成一段能运行的c语言代码 顺序表的顺序存储结构及顺序表的插入删除初始化,实现两个有序表的合并
时间: 2024-10-20 20:13:59 浏览: 26
当然,这里是一个简单的C语言代码示例,它实现了顺序表的插入、删除、初始化以及两个有序表的合并:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序表结构体
typedef struct {
int *data; // 整型数据指针
int size; // 当前元素数量
int capacity; // 初始容量
} List;
// 初始化顺序表
List* create_list(int capacity) {
List *list = (List*) malloc(sizeof(List));
list->data = (int*) malloc(capacity * sizeof(int));
list->size = 0;
list->capacity = capacity;
return list;
}
// 插入元素到列表末尾
void insert(List *list, int value) {
if(list->size == list->capacity){
list->capacity *= 2;
list->data = (int*) realloc(list->data, list->capacity * sizeof(int)); // 动态扩容
}
list->data[list->size++] = value;
}
// 删除指定索引处的元素
void delete(List *list, int index) {
if(index >= 0 && index < list->size) {
memmove(&list->data[index], &list->data[index + 1], (list->size - index - 1) * sizeof(int));
list->size--;
} else {
printf("Error: Index out of bounds.\n");
}
}
// 合并两个有序表
List* merge_sorted_lists(List *list1, List *list2) {
List *merged_list = create_list(list1->size + list2->size);
int i = 0, j = 0;
while(i < list1->size && j < list2->size) {
if(list1->data[i] <= list2->data[j]) {
merged_list->data[merged_list->size++] = list1->data[i++];
} else {
merged_list->data[merged_list->size++] = list2->data[j++];
}
}
// 如果其中一个列表还有剩余元素,将它们添加到新列表中
while(i < list1->size) {
merged_list->data[merged_list->size++] = list1->data[i++];
}
while(j < list2->size) {
merged_list->data[merged_list->size++] = list2->data[j++];
}
return merged_list;
}
// 示例用法
int main() {
List *list1 = create_list(5); // 初始化一个有初始容量的列表
List *list2 = create_list(5);
// 假设我们已经对list1和list2进行了排序
// ... (这里省略了实际排序部分)
insert(list1, 8);
insert(list1, 4);
insert(list2, 6);
insert(list2, 2);
List *merged = merge_sorted_lists(list1, list2);
for(int i = 0; i < merged->size; i++) {
printf("%d ", merged->data[i]);
}
delete(merged, 1); // 删除某个元素,这里仅做演示
free(merged->data);
free(merged);
return 0;
}
```
阅读全文