【数据结构 | 入门】线性表与链表 (问题引入&实现&算法优化)

这篇具有很好参考价值的文章主要介绍了【数据结构 | 入门】线性表与链表 (问题引入&实现&算法优化)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

讲数据结构链表课程导入,数据结构与算法章,数据结构,链表,算法,c语言,线性表

🤵‍♂️ 个人主页: @计算机魔术师
👨‍💻 作者简介:CSDN内容合伙人,全栈领域优质创作者。

本文是浙大数据结构学习笔记专栏

一、问题引入 - 如何用编程表达多项式

这里我们引入一个问题,最常见的多项式,我们如何使用编程将多项式表示出来呢?
讲数据结构链表课程导入,数据结构与算法章,数据结构,链表,算法,c语言,线性表

讲数据结构链表课程导入,数据结构与算法章,数据结构,链表,算法,c语言,线性表

方法一 - 顺序存储结构

我们可以使用数组来表示,但是会随着一个问题,如下图底部所表示的多项式,我们需要多大的数组来表示呢?显然需要使用2001个数组来表示,缺只有两项多项式,会有非常大一部分为0,会很浪费空间

讲数据结构链表课程导入,数据结构与算法章,数据结构,链表,算法,c语言,线性表

方法二- 顺序存储结构表示非零项

讲数据结构链表课程导入,数据结构与算法章,数据结构,链表,算法,c语言,线性表
这样我们就可以只存储存在的多项式,减少了大量空间的浪费,那么难点来了,怎么进行加减操作呢? 要求是按指数大小有序存储
我们按照次方排序,不相同时往下放,相同时系数相加即可,
讲数据结构链表课程导入,数据结构与算法章,数据结构,链表,算法,c语言,线性表

方法三 - 链表结构存储非零项

讲数据结构链表课程导入,数据结构与算法章,数据结构,链表,算法,c语言,线性表
我们还可以使用链表来实现,加减也是和上面的方法一样

二、什么是线性表

讲数据结构链表课程导入,数据结构与算法章,数据结构,链表,算法,c语言,线性表

2.1 抽象类型描述

(描述分为 数据对象集操作集`)

讲数据结构链表课程导入,数据结构与算法章,数据结构,链表,算法,c语言,线性表

三、 线性表的顺序存储实现

讲数据结构链表课程导入,数据结构与算法章,数据结构,链表,算法,c语言,线性表

3.3 主要操作的实现

初始化与查找

讲数据结构链表课程导入,数据结构与算法章,数据结构,链表,算法,c语言,线性表

插入(首先需要全部元素往后挪)

讲数据结构链表课程导入,数据结构与算法章,数据结构,链表,算法,c语言,线性表

讲数据结构链表课程导入,数据结构与算法章,数据结构,链表,算法,c语言,线性表

删除操作
讲数据结构链表课程导入,数据结构与算法章,数据结构,链表,算法,c语言,线性表
讲数据结构链表课程导入,数据结构与算法章,数据结构,链表,算法,c语言,线性表

四、 线性表的链式存储实现

讲数据结构链表课程导入,数据结构与算法章,数据结构,链表,算法,c语言,线性表
其中问题在于我们只知道一个链表头,那我们如何知道该线性表的长度为多少?

4.3 主要操作的实现

实现方法是遍历链表长
讲数据结构链表课程导入,数据结构与算法章,数据结构,链表,算法,c语言,线性表

查找 (在链表中查找值比数组麻烦,也需要便利链表)
讲数据结构链表课程导入,数据结构与算法章,数据结构,链表,算法,c语言,线性表
插入

讲数据结构链表课程导入,数据结构与算法章,数据结构,链表,算法,c语言,线性表

讲数据结构链表课程导入,数据结构与算法章,数据结构,链表,算法,c语言,线性表
删除操作
讲数据结构链表课程导入,数据结构与算法章,数据结构,链表,算法,c语言,线性表
需要注意的是删除第一个结点的操作,由于第一个结点没有上一个结点(头节点不算)所以将后面的结点往前挪,如果不是第一个节点,则将结点指针指向往后指向一位

五、 广义表

为了表示二元多项式,我们可以将二元多项式看作只关于 x x x得一元多项式,如下(每个链表钟第一个地址代表着参数,第二个值代表x的幂
讲数据结构链表课程导入,数据结构与算法章,数据结构,链表,算法,c语言,线性表

我们使用 c语言所提供的联合实现
讲数据结构链表课程导入,数据结构与算法章,数据结构,链表,算法,c语言,线性表

六、多重链表

广义表其实就是特殊的多重链表
讲数据结构链表课程导入,数据结构与算法章,数据结构,链表,算法,c语言,线性表

我们看一个矩阵的例子(和之前存贮多项式一样,用数组存储面对非常多的系数为0时,非常浪费空间)
讲数据结构链表课程导入,数据结构与算法章,数据结构,链表,算法,c语言,线性表
我们抓住关键信息,构造结点,其中如下,左上角的Term为入口点,两个指针指向行头结点和列头结点,
讲数据结构链表课程导入,数据结构与算法章,数据结构,链表,算法,c语言,线性表

我们便可通过联合将非0元素与0元素合并为一个tag
讲数据结构链表课程导入,数据结构与算法章,数据结构,链表,算法,c语言,线性表文章来源地址https://www.toymoban.com/news/detail-812236.html

  ✨谢谢你的阅读,您的点赞和收藏就是我创造的最大动力!✨

到了这里,关于【数据结构 | 入门】线性表与链表 (问题引入&实现&算法优化)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】LinkedList与链表

    上节课已经熟悉了ArrayList的使用,并且进行了简单模拟实现。通过源码知道,ArrayList底层使用数组来存储元素: 由于其底层是一段连续空间,当 在ArrayList任意位置插入或者删除元素时,就需要将后序元素整体往前或者往后搬移,时间复杂度为O(n),效率比较低 ,因此A rrayLi

    2024年02月07日
    浏览(44)
  • 【数据结构】链表与LinkedList

    作者主页: paper jie 的博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《JAVA数据结构》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造,将javaSE基础知识一网打尽,希望可以帮到读者们哦。 其他专栏

    2024年02月08日
    浏览(49)
  • 数据结构(Java实现)LinkedList与链表(上)

    链表 逻辑结构 无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构,如哈希桶、图的邻接表等等。 无头双向链表:在Java的集合框架库中LinkedList底层实现就是无头双向循环链表。 链表的实现 创建一个链表 遍历单链表 、 得到

    2024年02月11日
    浏览(52)
  • 数据结构(Java实现)LinkedList与链表(下)

    ** ** 结论 让一个指针从链表起始位置开始遍历链表,同时让一个指针从判环时相遇点的位置开始绕环运行,两个指针都是每次均走一步,最终肯定会在入口点的位置相遇。 LinkedList的模拟实现 单个节点的实现 尾插 运行结果如下: 也可以暴力使用 全部代码 MyLinkedList IndexOut

    2024年02月11日
    浏览(45)
  • 【数据结构(三)】链表与LinkedList

    ❣博主主页: 33的博客❣ ▶️文章专栏分类:数据结构◀️ 🚚我的代码仓库: 33的代码仓库🚚 🫵🫵🫵 关注我带你学更多数据结构知识 在上一篇文章中,我们已经认识了顺序表,通过源码我们知道ArrayList底层是使用数组来存储元素,当在ArrayList任意位置插入或者删除元素时,

    2024年04月13日
    浏览(52)
  • 《数据结构与算法》之队列与链表复习

    我们在上一次学习了堆栈的数据结构以后,可以了解到它是受限制的操作,比如我们操作只能在栈顶,现在我们要学习的东西叫做队列,它也是受限制的一种数据结构,它的特点是队头只出数据,而队尾只入数据, 它的结构就和它的名字,像我们平时排队一样先来的人肯定要

    2024年02月08日
    浏览(66)
  • 【数据结构】线性表与顺序表

    ⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:浅谈数据结构 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 线性表(linear list) 是n个具有相同特性的数据元素的有限序列。 它是一种在实际中广泛使用的数据结构,常见的线性表:顺序表

    2024年02月07日
    浏览(46)
  • 【编织时空四:探究顺序表与链表的数据之旅】

    链表的分类 带头双向循环链表接口实现 顺序表和链表的区别 缓存利用率参考存储体系结构 以及 局部原理性。 实际中链表的结构非常多样,以下情况组合起来就有8种链表结构: 1. 单向或者双向 2. 带头或者不带头 3. 循环或者非循环  虽然有这么多的链表的结构,但是我们实

    2024年02月12日
    浏览(56)
  • 【编织时空三:探究顺序表与链表的数据之旅】

    链表OJ题 思路一:删除头结点时另做考虑(由于头结点没有前一个结点) 思路二:添加一个虚拟头结点,删除头结点就不用另做考虑 思路:通过三个指针的操作,每次将当前节点反转并向前移动 ​ 思路:头插法 思路:快慢指针的前进方向相同,且它们步伐的「差」是恒定

    2024年02月11日
    浏览(70)
  • 【数据结构】_4.List接口实现类LinkedList与链表

    目录 1.链表的结构与特点 1.1 链表的结构: 1.2 链表的特点: 2. 不带头单链表的模拟实现 3. 单链表OJ 3.1 题目1:移除链表元素:  3.2 题目2:反转一个单链表 3.3 题目3:返回链表的中间结点 3.4 题目4:链表的倒数第k个结点 3.5 题目5:合并两个有序链表 3.6 题目6:链表的回文结构

    2024年02月15日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包