C语言 实现线性表的顺序存储定义,完成顺序表的创建、插入、删除、查找、排序等常用操作,完成两个有序线性表的合并,要求同样的数据元素只出现一次。
时间: 2024-11-25 09:21:25 浏览: 27
在C语言中,线性表的顺序存储通常是通过数组来实现的,我们首先需要定义结构体来表示每个元素,并定义相关的函数来操作这个线性表。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义线性表的节点结构体
typedef struct {
int data; // 数据域
} Node;
// 线性表的定义
typedef struct {
Node* array; // 存储数据的数组
int size; // 当前元素的数量
int capacity; // 数组的最大容量
} LinearList;
// 初始化线性表
void init_list(LinearList* list) {
list->array = NULL;
list->size = 0;
list->capacity = 10; // 初始容量为10
}
// 插入元素到线性表末尾
void insert_at_end(LinearList* list, int value) {
if (list->size == list->capacity) {
list->capacity *= 2; // 如果已满,扩大容量
list->array = realloc(list->array, sizeof(Node) * list->capacity);
}
list->array[list->size++] = (Node){value};
}
// 删除指定位置的元素
void delete_element(LinearList* list, int index) {
if (index >= 0 && index < list->size) {
for (int i = index; i < list->size - 1; i++) {
list->array[i] = list->array[i + 1];
}
list->size--;
if (list->size == 0) {
free(list->array);
list->array = NULL;
} else {
list->array = realloc(list->array, sizeof(Node) * list->size);
}
}
}
// 查找元素是否存在
int search(LinearList* list, int value) {
for (int i = 0; i < list->size; i++) {
if (list->array[i].data == value)
return 1; // 找到了
}
return 0; // 没找到
}
// 冒泡排序线性表
void bubble_sort(LinearList* list) {
for (int i = 0; i < list->size - 1; i++) {
for (int j = 0; j < list->size - 1 - i; j++) {
if (list->array[j].data > list->array[j + 1].data) {
Node temp = list->array[j];
list->array[j] = list->array[j + 1];
list->array[j + 1] = temp;
}
}
}
}
// 合并两个有序线性表(去重)
void merge_sorted_lists(LinearList* list1, LinearList* list2, LinearList* merged_list) {
int i = 0, j = 0, k = 0;
while (i < list1->size && j < list2->size) {
if (list1->array[i].data <= list2->array[j].data) {
insert_at_end(merged_list, list1->array[i].data);
i++;
} else if (list1->array[i].data > list2->array[j].data) {
insert_at_end(merged_list, list2->array[j].data);
j++;
}
}
// 把剩余的元素添加到合并后的列表
while (i < list1->size) {
insert_at_end(merged_list, list1->array[i].data);
i++;
}
while (j < list2->size) {
insert_at_end(merged_list, list2->array[j].data);
j++;
}
}
阅读全文