线性表顺序存储结构下基本线性表顺序存储结构下基本操作的实现(初始化、建表、取值、查找、插入、删除、两个非递减有序顺序表的归并等)。 用C语言实现代码
时间: 2024-12-02 13:21:35 AIGC 浏览: 78
线性表的顺序存储结构是最基础的数据结构之一,其数据元素通过连续的内存空间存储。以下是C语言中基本操作的实现:
1. **初始化(创建空表)**:
```c
typedef struct {
int* data; // 数据数组指针
int size; // 表长度
int capacity; // 表容量
} LinearList;
// 初始化空列表
LinearList* init_list() {
LinearList* list = malloc(sizeof(LinearList));
list->data = NULL;
list->size = 0;
list->capacity = 0;
return list;
}
```
2. **建表(向表中添加元素)**:
```c
void insert(LinearList* list, int value) {
if (list->size == list->capacity) {
list->capacity *= 2;
list->data = realloc(list->data, list->capacity * sizeof(int));
}
list->data[list->size++] = value;
}
```
3. **取值(访问元素)**:
```c
int get_value(LinearList* list, int index) {
if (index < 0 || index >= list->size) {
printf("Index out of bounds.\n");
return -1; // 返回错误码
}
return list->data[index];
}
```
4. **查找(二分查找,假设已排序)**:
```c
int search_sorted(LinearList* list, int target) {
int left = 0, right = list->size - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (list->data[mid] == target)
return mid;
else if (list->data[mid] < target)
left = mid + 1;
else
right = mid - 1;
}
return -1; // 如果没找到,返回-1
}
```
5. **插入(已排序表中插入新元素保持有序)**:
```c
void insert_sorted(LinearList* list, int value) {
int index = search_sorted(list, value);
if (index != -1) {
memmove(&list->data[index+1], &list->data[index], (list->size - index) * sizeof(int));
} else {
list->size++;
}
list->data[index] = value;
}
```
6. **删除(删除指定位置的元素,假设表已排序)**:
```c
void remove_sorted(LinearList* list, int index) {
if (index < 0 || index >= list->size) {
printf("Invalid index.\n");
return;
}
if (index == list->size - 1) { // 尾部元素
list->size--;
return;
}
int lastElement = list->data[--list->size]; // 存储最后一个元素
memmove(&list->data[index], &list->data[index+1], (list->size - index) * sizeof(int));
list->data[list->size] = lastElement;
}
```
7. **两个非递减有序表的归并**:
```c
void merge_sorted(LinearList* list1, LinearList* list2) {
LinearList merged;
merged.size = list1->size + list2->size;
merged.capacity = merged.size;
merged.data = malloc(merged.capacity * sizeof(int));
int i = 0, j = 0, k = 0;
while (i < list1->size && j < list2->size) {
if (list1->data[i] <= list2->data[j]) {
merged.data[k++] = list1->data[i++];
} else {
merged.data[k++] = list2->data[j++];
}
}
while (i < list1->size) {
merged.data[k++] = list1->data[i++];
}
while (j < list2->size) {
merged.data[k++] = list2->data[j++];
}
free(list1->data); // 释放原表内存
list1->data = merged.data;
list1->size = merged.size;
list1->capacity = merged.capacity;
free(merged.data); // 释放临时合并表内存
}
```
阅读全文
相关推荐
















