C语言顺序表实现及操作393


简介

顺序表是一种基本的数据结构,它将数据按顺序存储在一段连续的内存空间中。在C语言中,顺序表可以使用数组来实现。本文将详细介绍C语言中顺序表的实现和各种操作。

顺序表实现

在C语言中,顺序表可以由以下结构表示:```c
#include
#include
typedef struct {
int size;
int max_size;
int *arr;
} SeqList;
```
* `size`:表示顺序表中元素的个数。
* `max_size`:表示顺序表的最大容量。
* `arr`:指向顺序表中元素数组的指针。

基本的顺序表操作

创建顺序表
```c
SeqList *create_seq_list(int max_size) {
SeqList *list = (SeqList *)malloc(sizeof(SeqList));
list->size = 0;
list->max_size = max_size;
list->arr = (int *)malloc(sizeof(int) * max_size);
return list;
}
```


获取顺序表长度
```c
int get_seq_list_length(SeqList *list) {
return list->size;
}
```


判断顺序表是否为空
```c
int is_seq_list_empty(SeqList *list) {
return list->size == 0;
}
```


插入元素
```c
int insert_seq_list(SeqList *list, int index, int value) {
if (index < 0 || index > list->size) {
return -1;
}
for (int i = list->size; i > index; i--) {
list->arr[i] = list->arr[i - 1];
}
list->arr[index] = value;
list->size++;
return 0;
}
```


删除元素
```c
int delete_seq_list(SeqList *list, int index) {
if (index < 0 || index >= list->size) {
return -1;
}
for (int i = index; i < list->size - 1; i++) {
list->arr[i] = list->arr[i + 1];
}
list->size--;
return 0;
}
```


获取元素
```c
int get_seq_list_element(SeqList *list, int index) {
if (index < 0 || index >= list->size) {
return -1;
}
return list->arr[index];
}
```

进阶操作

顺序表扩容
```c
int expand_seq_list(SeqList *list, int new_max_size) {
if (new_max_size max_size) {
return -1;
}
int *new_arr = (int *)realloc(list->arr, sizeof(int) * new_max_size);
if (new_arr == NULL) {
return -1;
}
list->arr = new_arr;
list->max_size = new_max_size;
return 0;
}
```


顺序表缩容
```c
int shrink_seq_list(SeqList *list, int new_max_size) {
if (new_max_size >= list->max_size) {
return -1;
}
int *new_arr = (int *)realloc(list->arr, sizeof(int) * new_max_size);
if (new_arr == NULL) {
return -1;
}
list->arr = new_arr;
list->max_size = new_max_size;
return 0;
}
```


顺序表查找
```c
int find_seq_list(SeqList *list, int value) {
for (int i = 0; i < list->size; i++) {
if (list->arr[i] == value) {
return i;
}
}
return -1;
}
```


顺序表合并
```c
SeqList *merge_seq_list(SeqList *list1, SeqList *list2) {
SeqList *result = create_seq_list(list1->size + list2->size);
for (int i = 0; i < list1->size; i++) {
insert_seq_list(result, i, list1->arr[i]);
}
for (int i = 0; i < list2->size; i++) {
insert_seq_list(result, list1->size + i, list2->arr[i]);
}
return result;
}
```


顺序表排序
```c
void sort_seq_list(SeqList *list) {
for (int i = 0; i < list->size - 1; i++) {
for (int j = i + 1; j < list->size; j++) {
if (list->arr[i] > list->arr[j]) {
int temp = list->arr[i];
list->arr[i] = list->arr[j];
list->arr[j] = temp;
}
}
}
}
```

C语言中的顺序表是一种基本的数据结构,它使用数组来存储数据。本文介绍了顺序表的创建、基本的插入、删除、获取元素等操作,以及一些进阶操作,如扩容、缩容、查找、合并、排序等。熟练掌握顺序表的实现和操作对于编写高效、健壮的C语言程序至关重要。

2024-11-10


上一篇:C语言函数的组成及概念

下一篇:C 语言中以优雅的方式输出 “ABC“