第3章-线性表的定义与实现
第一章《数据结构与算法是什么?》说过数据结构有四种逻辑结构,线性结构是最基本和最常用的一种,它表示的是线性结构,元素之间存在一对一的关系,数据元素之间按照某种规定存在一个顺序关系。
一、定义
假设有 个同类型数据元素的有限序列,记为:
它构成一个线性表,任何一种逻辑结构都可以使用顺序存储和链式存储来实现,使用顺序存储时,会在内存中分配连续的空间来存储数据元素,在程序中经常使用数组来实现。
但很多时候无法知道预先分配多大的空间合适,如果数据量较大时,内存中不存在那么大的连续空间,所以会导致内存分配失败,此时就可以使用链式存储来实现。
链式存储可以使用任何地址的空间存放数据元素,可以空间不连续,它存放的数据结点,里面包含数据元素和指向另一个数据元素的引用(或指针)。
二、线性表基本操作
数据结构包含数据的基本操作,使用不同的存储结构来实现线性表的插入、删除、查找、遍历等基本操作。
1. 插入
初始化一组数据 ,然后在 后面插入数据 。
顺序存储中,定位到 ,需要将 往后移动才能插入。
链式存储中,定位到 ,然后把 的指针指向 ,再把 的指针指向 就完成了新节点的插入。
由此可得链表比顺序表插入的效率高。
顺序存储需要预先分配内存空间,在插入时初始化的空间不够会抛异常。
2. 删除
初始化一组数据 ,然后删除数据 。
顺序存储中,定位到 删除并释放内存,然后将 往前移动。
链式存储中,定位到 ,然后把 的指针指向 ,释放内存即可删除。
由此可得链表比顺序表删除的效率高。
3. 查找
初始化一组数据 ,然后查找数据 。
顺序存储中,数据在内存中是连续的,如果已知 的下标,可以直接获取到该数据元素。
在下标未知的情况下,也可以通过遍历来查找。
链式存储中,数据在内存中是无序的,不能通过下标查找,只能通过遍历来查找数据。
而链式存储在遍历的时候,会增加寻址的操作。
由此可得顺序表比链表查找的效率高。
4. 遍历
初始化一组数据 ,然后遍历所有数据 。
顺序存储中,遍历连续内存空间上的数据元素。
链式存储中,通过地址引用来找到下一个数据元素,来遍历所有数据。
链式存储增加了寻址的操作,所以遍历的效率低于顺序存储。
三、链式存储扩展
前面讲的链式结构实现的线性表都是单向链表,可以增加结点的引用来创建更多的链表结构,比如:双向链表、单向循环链表和双向循环链表等。
四、代码示例
具体的代码实现如下:
本文来自博客园,作者:码匠_CodeArtist,转载请注明原文链接:https://www.cnblogs.com/code-artist/p/ds-3.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)