网站建设与管理实训心得怎么写,网站添加文字大小,建设个人网银登录入口,广东东莞大益队文章目录 1. 线性表2. 顺序表2.1 概念与结构2.2 分类2.2.1 静态顺序表2.2.2 动态顺序表 2.3 动态顺序表的实现2.4 顺序表算法题2.4.1 移除元素2.4.2 删除有序数组中的重复项2.4.3 合并两个有序数组 2.5 顺序表问题与思考 1. 线性表
线性表#xff08;linear list#xff09;… 文章目录 1. 线性表2. 顺序表2.1 概念与结构2.2 分类2.2.1 静态顺序表2.2.2 动态顺序表 2.3 动态顺序表的实现2.4 顺序表算法题2.4.1 移除元素2.4.2 删除有序数组中的重复项2.4.3 合并两个有序数组 2.5 顺序表问题与思考 1. 线性表
线性表linear list是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构常见的线性表有顺序表、链表、栈、队列、字符串…
线性表在逻辑上是线性结构也就说是连续的⼀条直线。但是在物理结构上并不⼀定是连续的 线性表在物理上存储时通常以数组和链式结构的形式存储。
2. 顺序表
2.1 概念与结构
概念顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构一般情况下采用数组存储。 顺序表和数组的区别 顺序表的底层结构是数组对数组的封装实现了常用的增删改查等接口 2.2 分类
2.2.1 静态顺序表
概念使用定长数组存储元素 静态顺序表缺陷空间给少了不够用给多了造成空间浪费
2.2.2 动态顺序表
概念使用动态开辟的连续空间存储元素 2.3 动态顺序表的实现
SeqList.h
#define INIT_CAPACITY 4
typedef int SLDataType;
// 动态顺序表 -- 按需申请
typedef struct SeqList
{SLDataType * a;int size; // 有效数据个数int capacity; // 空间容量
}SL;//初始化和销毁
void SLInit(SL * ps);
void SLDestroy(SL * ps);
void SLPrint(SL * ps);
//扩容
void SLCheckCapacity(SL * ps);//头部插⼊删除 / 尾部插⼊删除
void SLPushBack(SL * ps, SLDataType x);
void SLPopBack(SL * ps);
void SLPushFront(SL * ps, SLDataType x);
void SLPopFront(SL * ps);//指定位置之前插⼊/删除数据
void SLInsert(SL * ps, int pos, SLDataType x);
void SLErase(SL * ps, int pos);
int SLFind(SL* ps, SLDataType x);[!NOTE] 代码小提示 编写代码过程中要勤测试写一部分测试一部分避免写出大量代码后再测试而导致出现问题问题定位无从下手。 2.4 顺序表算法题
2.4.1 移除元素
https://leetcode.cn/problems/remove-element/description/
2.4.2 删除有序数组中的重复项
https://leetcode.cn/problems/remove-duplicates-from-sorted-array/description/
2.4.3 合并两个有序数组
https://leetcode.cn/problems/merge-sorted-array/description/
2.5 顺序表问题与思考 中间/头部的插入删除时间复杂度为 O ( N ) O(N) O(N) 增容需要申请新空间拷贝数据释放旧空间。会有不小的消耗。 增容一般是呈2倍的增长势必会有一定的空间浪费。例如当前容量为100满了以后增容到200。
我们再继续插入了5个数据后面没有数据插入了那么就浪费了95个数据空间。
思考如何解决以上问题呢 ❤️❤️❤️之后的博客内容将会进行讲解❤️❤️❤️