数据结构系列
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
1.线性表
1.1 线性表的定义和相关概念
线性表:具有相同数据的序列。线性的表
包含顺序表(数组)和链表。
概念 | 描述 |
---|---|
位序 | 从1开始计数,用 i 表示位序。 |
数组下标 | 从0开始计数,用 index 表示数组下标,其中 index + 1 = i |
表头元素 | 线性表的第一个元素。 |
表尾元素 | 线性表的最后一个元素。 |
前驱 | 前一个元素,即当前元素的前一个位置的元素。 |
后驱 | 后一个元素,即当前元素的后一个位置的元素。 |
1.2 线性表的创销 增删查改 判空表长打印
2.顺序表
2.1 顺序表定义和相关概念
顺序表:逻辑上相邻的元素,物理上也相邻。----数组结构
2.2 顺序表的静态实现
缺点是:定义后无法扩容
#define capacity 10
typedef int myDataType
typedef struct
{
myDataType data[capacity];
int size;//顺序表当前的数据长度
}SqList;
2.3 顺序表的动态实现
#define capacity 10
typedef int myDataType
typedef struct
{
myDataType *data;
int size;//顺序表当前的数据长度
int capacity;//顺序表的容量
}SqList;
2.4 顺序表的指定位置插入和指定位置删除
2.4.1 顺序表的指定位置插入
在index位置插入数据,index(取代index位置,因此index也要挪动)和index之后的数据都需要挪动
则挪动的数据的数据下标范围是[index,size-1]
如何将index位置数据挪动呢?
向后挪,为了放在覆盖,则需要从最后开始向后挪动。
#include <assert.h> // 包含assert.h以使用assert
typedef struct {
int *data; // 动态分配的数组
int size; // 顺序表的当前长度
} SqList;
// 插入元素
void ListInsert(SqList *L, int index, int e) {
// 确保index在合法范围内
assert(index >= 0 && index <= L->size);
// 检查是否有足够的空间插入新元素
if (L->size == L->capacity) {
// 这里需要实现扩容逻辑,例如:
int newCapacity = L->capacity * 2;
int *newData = (int *)realloc(L->data, newCapacity * sizeof(int));
if (!newData) {
exit(EXIT_FAILURE); // 内存分配失败,退出程序
}
L