线性表的定义与实现

    一、定义

    二、线性表基本操作

        1. 插入

        2. 删除

        3. 查找

        4. 遍历

    三、链式存储扩展

    四、代码示例

第一章《数据结构与算法是什么?》说过数据结构有四种逻辑结构,线性结构是最基本和最常用的一种,它表示的是线性结构,元素之间存在一对一的关系,数据元素之间按照某种规定存在一个顺序关系。

一、定义

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

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

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

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

线性表的定义与实现

二、线性表基本操作

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

1. 插入

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

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

线性表的定义与实现

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

线性表的定义与实现

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

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

2. 删除

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

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

线性表的定义与实现

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

线性表的定义与实现

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

3. 查找

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

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

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

线性表的定义与实现

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

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

线性表的定义与实现

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

4. 遍历

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

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

线性表的定义与实现

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

线性表的定义与实现

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

三、链式存储扩展

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

线性表的定义与实现

四、代码示例

具体的代码实现如下:

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

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

原文始发于微信公众号(CodeArtist):线性表的定义与实现

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/138035.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!