IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构-线性表--堆栈&队列的链式存储实现 -> 正文阅读

[数据结构与算法]数据结构-线性表--堆栈&队列的链式存储实现

前言

两者抽象数据类型:
网上有,就不想说了。
堆栈:有约束(后入先出)的线性表。
队列:有约束(先入先出)的线性表。

我想说

我的思路来自,因为队列的约束之一是,在线性表中只能在一端或者另一端进行操作。
每一个队列元素我们可以构造一个结构体,这个结构体在线性表的 链式存储实现就可以叫做结点,这句话不是说结构体就是链表中的结点。那么实现队列就很简单了,就是一连串相连的结点。但队列的不同在于其约束,只能在一端(队列头元素)或另一端(队列尾元素)进行操作。如何实现?
在数组中很简单,我们可以令两个坐标front、rear,就可以完成对队列首尾元素的操作。
但链表不行,因为链表的存储位置是不连续的。链表实现相连看起来连续的根本就是指针,并且链表你起初只能得到首结点的信息。但就像你有李华的qq,李华有小明的qq,在你们三个人不是邻居的情况下,只知道你的信息包括qq,如何确定小明的信息,只能通过你找到李华,再找到小明。所以链表不行就在于尾部元素位置不能像数组那样记忆下来。
让我们再回到之前的线性表的链式实现,我们之所以能够控制链表,实质在于我们可以控制链表的头结点,让我们想想,是通过什么?是通过结构体指针。那么不同人对于指针有不同的理解,那我的理解是海贼王的多弗朗明哥的线线果实,一个指针过程是通过找到你的地址,然后找你的信息。忽视这个过程其实指针就可看作明哥的线线果实,如果你被我使用线线果实(指针)所操控,那你就可以被我利用,线性表的链表最初就是因为我们操控了头节点,所以就可以实现后面的增删查。
让我们再回到现在,队列要求我们要能过同时控制两个元素,及两个结点,可是我们只有一个指针,我们只能控制一个,所以队列的链式实现,就是再造一个指针,再用线线果实能力再造一根线。可能不太好理解了,画一个图
在这里插入图片描述
就是两个线,方框就是结点,哈哈,可能有些人觉得有些随意了,不严谨,但在我看来,有些时候过分追求严谨反而弄巧成拙,有些道理明明很简单,可是为了表达的严谨,却让大多数人无法从一开始就产生了逃避的理由。在我看来这就是这么一回事,队列要求我们要能同时控制两个元素,我们只有一条线,如果单纯靠一条线,尽管可以实现,但两条线它不香吗?
并且我们知道链表中的结点还有一个“隐形”(不是真隐形,只是没有用,所以相当于隐形)的线,只要我通过我手中的线找到这个结点,我还可以连接我手中的线与你的线就行操作你和其他结点的关系,那个隐形的线就是我们定义结构体变量里面的结构体指针next。

插入操作

在这里插入图片描述

开个玩笑,应该是这样吧,我们插入一个新的队列元素,建立一个新结点,然后让前一个结点的next(隐形的线)指向新创建的结点。
通过这种线的思想很容易就写出相应代码了吧,我有两根线,现在要求我们控制队列头元素和尾元素进行操作,当然起初,我们假设没有空结点,那么两根线都是控制着一个元素,没有逻辑上的问题。
当然一般来说,一只手只能使用一条线,如果要一只手使用两个线,我们可以通过结构体,一个结构体两个指针,对应一只手两条线。
在这里插入图片描述

插入操作很显然通过rear指针(第二条线),我控制这条线找到首结点,然后控制你的第二条线建立你与新结点的联系,对应:
Q->rear->next=p(新节点);
但是这样就完了吗?没有,因为要求我们随时都能快速的通过尾指针进行操作,随意我们将第二根线操作新结点,对应
Q->rear=p(新节点);
那么我们还应该思考如果有空结点,插入操作应该注意什么,已经其他操作。
权威结构体创建代码
在这里插入图片描述
对于队列,我想的注意点就是这里,那么堆栈就很简单了,只需要控制栈顶,而栈顶就是对应链表的头结点,所以就不用两条线两个指针去控制了。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-13 17:44:00  更:2021-07-13 17:44:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 17:20:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码