数据结构系列
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
数据结构
- 数据结构系列
- 1.线性表
- 1.1 线性表的定义和相关概念
- 1.2 线性表的创销 增删查改 判空表长打印
- 2.顺序表
- 2.1 顺序表定义和相关概念
- 2.2 顺序表的静态实现
- 2.3 顺序表的动态实现
- 2.4 顺序表的指定位置插入和指定位置删除
- 2.4.1 顺序表的指定位置插入
- 2.4.2 顺序表的指定位置删除
- 3.pandas是什么?
- 3.1
- 3.2
- 3.3
- 4.pandas是什么?
- 4.1
- 4.2
- 4.3
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->data = newData;
L->capacity = newCapacity;
}
// 向后挪动
for (int p = L->size - 1; p >= index; p--) {
L->data[p + 1] = L->data[p];
//关于 L->data[p + 1] = L->data[p];
//和 L->data[p] = L->data[p-1];
}
// 插入新元素
L->data[index] = e;
L->size++;
}
2.4.2 顺序表的指定位置删除
在index位置删除数据,后面的数据都需要向前挪动,为了防止覆盖,需要从最前面的位置开始挪动。
则挪动的数据的数据下标范围是[index+1,size-1]
如何将index位置数据向前挪,呢?前挪P指向后。
#include <assert.h> // 包含assert.h以使用assert
typedef struct {
int *data; // 动态分配的数组
int size; // 顺序表的当前长度
} SqList;
// 插入元素
void Listdelete(SqList *L, int index) {
// 确保index在合法范围内
assert(index >= 0 && index <= L->size);
for (int p = index+1; p <=size-1 ; p++) {
L->data[p -1] = L->data[p];
}
L->size--;
}