数据结构-线性表

一、定义

线性表是n(n≥0)个具有相同数据类型的元素组成的有序序列,是最基本的线性结构。

• 逻辑特征:元素间为一对一的线性关系,有且仅有一个开始结点和一个终端结点,其余结点有且仅有一个前驱和一个后继。

• 空表:n=0时的线性表。

二、基本操作(核心接口)

  1. 初始化:创建一个空的线性表。

  2. 判空:判断线性表是否为空表。

  3. 求长度:返回线性表中元素的个数。

  4. 取值:获取指定位置的元素。

  5. 查找:按元素值查找其所在位置。

  6. 插入:在指定位置插入新元素。

  7. 删除:删除指定位置的元素。

  8. 遍历:依次访问线性表中的每个元素。

三、两种存储结构

  1. 顺序存储结构(顺序表)

• 实现方式:用一段连续的存储单元依次存储线性表的元素,通常借助数组实现。

• 地址计算:Loc(a_i) = Loc(a_1) + (i-1) \times L,其中L为单个元素占用的存储空间。

• 优缺点

◦ 优点:支持随机访问,时间复杂度为O(1);存储密度高,无需额外空间存储指针。

◦ 缺点:插入和删除操作需要移动大量元素,平均时间复杂度为O(n);静态顺序表的容量固定,无法动态扩展。

  1. 链式存储结构(链表)

• 实现方式:用一组任意的存储单元存储元素,每个结点包含数据域(存储元素值)和指针域(存储后继或前驱结点地址)。

• 常见类型

◦ 单链表:结点只有一个指针域,指向后继结点。

◦ 双链表:结点有两个指针域,分别指向前驱结点和后继结点。

◦ 循环链表:首尾结点相连,形成环形结构,可分为单循环链表和双循环链表。

• 优缺点

◦ 优点:插入和删除操作无需移动元素,已知前驱结点时时间复杂度为O(1);容量可动态扩展,无需预先分配空间。

◦ 缺点:不支持随机访问,查找元素需要从头结点开始遍历,时间复杂度为O(n);存储密度低,指针域会占用额外存储空间。

四、顺序表与链表的对比

• 存储方式:顺序表采用连续存储,链表采用离散存储。

• 访问方式:顺序表支持随机访问,链表仅支持顺序访问。

• 插入删除效率:顺序表效率低,需移动元素;链表效率高,仅需修改指针指向。

• 空间利用率:顺序表空间利用率高,无额外开销;链表空间利用率低,需存储指针。

• 适用场景:顺序表适用于频繁查询、元素个数固定的场景;链表适用于频繁插入删除、元素个数不固定的场景。

相关推荐
CSharp精选营4 天前
关系型 vs 非关系型:从原理到选型,一文搞定数据库核心分类
数据结构·nosql·关系型数据库·非关系型数据库·技术选型
RainCity4 天前
Java Swing 自定义组件库分享(十二)
java·笔记·后端
刘马想放假7 天前
Modbus 全栈技术解析:TCP、RTU、ASCII、RTU over TCP
数据结构·网络协议
北域码匠8 天前
冒泡排序太慢?鸡尾酒排序双向优化,原生 C# 零第三方库完整代码
数据结构·排序算法·泛型·c# 算法·鸡尾酒排序·原生 c# 开发·冒泡排序优化·嵌入式算法
LinXunFeng12 天前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
Darling噜啦啦15 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
小小工匠16 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
玖玥拾16 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
闪闪发亮的小星星16 天前
高斯光以及高斯光公式解释
笔记
cqbzcsq16 天前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息