线性表的定义与实现

简介: 线性结构是最基本和最常用的一种,它表示的是线性结构,元素之间存在一对一的关系,数据元素之间按照某种规定存在一个顺序关系。


一、定义



假设有  个同类型数据元素的有限序列,记为:

它构成一个线性表,任何一种逻辑结构都可以使用顺序存储和链式存储来实现,使用顺序存储时,会在内存中分配连续的空间来存储数据元素,在程序中经常使用数组来实现。

但很多时候无法知道预先分配多大的空间合适,如果数据量较大时,内存中不存在那么大的连续空间,所以会导致内存分配失败,此时就可以使用链式存储来实现。

链式存储可以使用任何地址的空间存放数据元素,可以空间不连续,它存放的数据结点,里面包含数据元素和指向另一个数据元素的引用(或指针)。


微信图片1000.png


二、线性表基本操作



数据结构包含数据的基本操作,使用不同的存储结构来实现线性表的插入、删除、查找、遍历等基本操作。


1. 插入


初始化一组数据  ,然后在  后面插入数据  。

顺序存储中,定位到  ,需要将  往后移动才能插入。

微信图片999.gif

链式存储中,定位到  ,然后把  的指针指向  ,再把  的指针指向  就完成了新节点的插入。

微信图片888.gif

由此可得链表比顺序表插入的效率高。

顺序存储需要预先分配内存空间,在插入时初始化的空间不够会抛异常。


2. 删除


初始化一组数据  ,然后删除数据  。

顺序存储中,定位到  删除并释放内存,然后将  往前移动。

微信图片777.gif

链式存储中,定位到  ,然后把  的指针指向  ,释放内存即可删除。

微信图片666.gif

由此可得链表比顺序表删除的效率高。


3. 查找


初始化一组数据  ,然后查找数据  。

顺序存储中,数据在内存中是连续的,如果已知  的下标,可以直接获取到该数据元素。

在下标未知的情况下,也可以通过遍历来查找。

微信图片555.gif


image.gif链式存储中,数据在内存中是无序的,不能通过下标查找,只能通过遍历来查找数据。

而链式存储在遍历的时候,会增加寻址的操作。

微信图片444.gifimage.gif

由此可得顺序表比链表查找的效率高。


4. 遍历


初始化一组数据  ,然后遍历所有数据 。

顺序存储中,遍历连续内存空间上的数据元素。

微信图片333.gif

image.gif

链式存储中,通过地址引用来找到下一个数据元素,来遍历所有数据。


微信图片222.gif

链式存储增加了寻址的操作,所以遍历的效率低于顺序存储。


三、链式存储扩展



前面讲的链式结构实现的线性表都是单向链表,可以增加结点的引用来创建更多的链表结构,比如:双向链表、单向循环链表和双向循环链表等。

微信图片111.png


四、代码示例



具体的代码实现如下:

Gitee:https://gitee.com/code_artist/DataStructure

GitHub:https://github.com/AiJiangnan/DataStructure

目录
相关文章
|
Web App开发
如何搭建 Scratch 官方网页版?真正意义上的一键安装部署
功能介绍 Scratch 是一款由麻省理工学院(MIT) 设计开发的一款面向少年的简易编程工具,Scratch 已经是少儿编程行业的基础软件。使用 Scratch,你可以编写属于你的互动媒体,像是故事、游戏、动画,然后你可以将你的创意分享给全世界。
9111 0
|
12月前
|
算法 容器
【算法】——双指针算法合集(力扣)
移动零,复写零,快乐数,盛最多水的容器,有效三角形的个数,和为s的两个数(查找总价格为目标值的两个商品 ),三数之和,四数之和
|
机器学习/深度学习 数据采集 算法
Python实现GBDT(梯度提升树)回归模型(GradientBoostingRegressor算法)项目实战
Python实现GBDT(梯度提升树)回归模型(GradientBoostingRegressor算法)项目实战
|
人工智能 容器
三句话开发一个刮刮乐小游戏!暖ta一整个冬天!
本文介绍了如何利用千问开发一款情侣刮刮乐小游戏,通过三步简单指令实现从单个功能到整体框架,再到多端优化的过程,旨在为生活增添乐趣,促进情感交流。在线体验地址已提供,鼓励读者动手尝试,探索编程与AI结合的无限可能。
三句话开发一个刮刮乐小游戏!暖ta一整个冬天!
|
自然语言处理 算法 数据可视化
9-4|Python在一群人聊天记录中提取关键字 需要什么步骤
9-4|Python在一群人聊天记录中提取关键字 需要什么步骤
|
Linux iOS开发 Docker
【开源推荐】简单的录屏工具
【6月更文挑战第5天】
430 9
|
JavaScript
MAC升级nodejs和npm到最新版
第一步,先查看本机node.js版本: node -v 第二步,清除node.js的cache: sudo npm cache clean -f 第三步,安装 n 工具,这个工具是专门用来管理node.
6101 0
|
人工智能 安全 架构师
2023中国国际服务贸易交易会,我们在这里!
2023中国国际服务贸易交易会,我们在这里!
1456 0
|
存储 编解码 弹性计算
云存储-对象存储的介绍和使用场景 | 学习笔记
快速学习云存储-对象存储的介绍和使用场景
云存储-对象存储的介绍和使用场景 | 学习笔记
|
存储 开发工具 Android开发
Android 中内部存储和外部存储的理解与应用
Android 中内部存储和外部存储的理解与应用
716 0