数据结构之受限线性表

受限线性表

对于一般线性表,虽然必须通过遍历逐一查找再对目标位置进行增、删和查操作,但至少一般线性表对于可操作元素并没有限制。说到这里,大家应该明白了,所谓的受限线性表,就是可操作元素受到了限制。
受限线性表可分为栈(Stack)和队列(Queue),如下图所示,这是比较特珠但很重要的数据结构,一定要掌握。
在这里插入图片描述

1.栈

栈,讲究的是“先进后出”,即最先进栈的数据最后出栈。就像箱子,我们整理东西时,先放进箱于里的东西会被压在最下面,后放进箱子里的东西会被放在最上面,等到从箱子里往外拿东西时,需要先把上面的东西拿出来才能拿到箱子最底下的东西,这就叫“先进栈的后出栈,后进栈的先出栈”。这与线性表分为顺序表和链表一样,栈也分为顺序栈和链栈。

(1)顺序栈

顺序栈也属于线性存储结构,而且和顺序表的数组结构极为相似,如下图所示。
在这里插入图片描述
可以看出,在这个数组中,我们先把1放了进去,然后依次是2、3和4,当我们要取出1时,必须先依次取出4、3和2。

(2)链栈

链栈的原理和顺序核很相似。顺序栈是将顺序表的一端封死作为栈底,将另一端作为栈顶。链栈也是如此,它把链表一端(尾部)封死作为栈底,将另一端(头部)作为栈顶,如下图所示。
在这里插入图片描述
可以看出,链栈其实就是一个只能用头插法插入和删除元素的链表。问题来了:如此限制链表有什么好处呢?有!那就是可以提高效率。在我们只开放链表头部进行插入和删除元素的同时,避免了大量遍历链表所带来的耗时操作。

2. 队列

队列讲究的是“先进先出”,即最先进队列的数据最先出队列。队列就像一根吸管,队列里的元素就像珍珠奶茶里的珍珠——最先进入吸管的珍珠将最先离开吸管(当然是被你吃了)。这就叫“先进队的先出队,后进队的后出队”。
生活中的队列应用也很多,如排队买票。前面的人比你先到,因此他先买,然后才轮到你。队列和栈一样,也可以分为顺序队列和链式队列。

(1)顺序队列

顺序队列其实就是在顺序表上实现队列结构。它和顺序栈的区别是,顺序栈是一边开口,而顺序队列是两边开口,如下图所示。
在这里插入图片描述
聪明的读者肯定会发现一个问题:顺序队列一直在往前“蹭”,前面的存储空间无法再次使用,这样会造成很大的空间浪费,而且还很容易导致数组溢出,引发错误。
那应该怎么办呢?读者肯定以为笔者要讲链式队列吧,然而并不是。不知读者是否还记得前面我们讲过的“环”?环就是解决这个问题的基本思路。我们完全可以用一个环状的顺序队列,把它的头尾巧妙地连接在一起,即可实现存储空间的循环使用,如下图所示。
在这里插入图片描述剩下的就让 top 和rear 这两个指针像仓鼠玩跑轮一样去工作就可以了。

(2)链式队列

链式队列也叫链队列,可以说是单链表和顺序队列的结合体,它的初始状态如下图所示。
在这里插入图片描述
此时队列里什么都没有,因此top 和 rear 指针同时指向了头节点。当我们试图添加新的数据元素时,需要按照以下3 步来操作:
(1)创建一个该数据元素的新节点。
(2)将队尾指针 rear所指向的节点的指针指向新节点。
(3)将队尾指针 rear 指向新节点。
当我们试图删除数据元素时,可以按照以下3步来操作:
(1)创建一个新指针p指向将出队的节点(首元节点)。
(2)将头节点的指针指向p指针所指向节点的下一个节点。
(3)释放p指针所指向的节点,回收内存空间。

如果该链式队列没有头节点,则第(1)步应改为将队头指针 top指向p指针所指向节点的下一个节点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/644928.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Web前端开发基础】CSS3之Web字体、字体图标、平面转换、渐变

CSS3之Web字体、字体图标、平面转换、渐变 目录 CSS3之Web字体、字体图标、平面转换、渐变一、Web字体1.1 Web字体概述1.2 字体文件1.3 font-face 规则 二、字体图标2.1 字体图标2.2 字体图标的优点2.3 图标库2.4 下载字体包2.5 字体图标的使用步骤2.6 字体图标使用注意点2.7 上…

「 典型安全漏洞系列 」06.路径遍历(Path Traversal)详解

引言:什么是路径遍历?如何进行路径遍历攻击并规避常见防御?如何防止路径遍历漏洞。 1. 简介 路径遍历(Path Traversal)是一种安全漏洞,也被称为目录遍历或目录穿越、文件路径遍历。它发生在应用程序未正确…

mysql生成最近24小时整点/最近30天/最近12个月时间临时表

文章目录 生成最近24小时整点生成最近30天生成最近12个月 生成最近24小时整点 SELECT-- 每向下推1行, i比上次减去1b.*, i.*,DATE_FORMAT( DATE_SUB( NOW(), INTERVAL ( -( i : i - 1 ) ) HOUR ), %Y-%m-%d %H:00 ) AS time FROM-- 目的是生成12行数据( SELECTa FROM( SELECT…

搭建《幻兽帕鲁》服务器需要怎样配置的云服务器?

随着《幻兽帕鲁》这款游戏的日益流行,越来越多的玩家希望能够在自己的服务器上体验这款游戏。然而,搭建一个稳定、高效的游戏服务器需要仔细的规划和配置。本文将分享搭建《幻兽帕鲁》服务器所需的配置及搭建步骤,助力大家获得更加畅快的游戏…

搭建k8s集群实战(一)系统设置

1、架构及服务 Kubernetes作为容器集群系统,通过健康检查重启策略实现了Pod故障自我修复能力,通过调度算法实现将Pod分布式部署,并保持预期副本数,根据Node失效状态自动在其他Node拉起Pod,实现了应用层的高可用性。 …

树的学习day01

树的理解 树是一种递归形式的调用 树是由于多个结点组成的有限集合T 树中有且仅有一个结点称为根 当结点大于1的时候,往往其余的结点为m个互不相交的有限个集合T1,…,Tm,每个互不相交的有限集合本身右是一棵树,称为这个根的子树 空树也是树 关…

选现货白银投资划不划算?

可以肯定的是选择现货白银投资是划算的,但投资者需要有足够的知识和经验,以及对市场的敏锐观察力。只有这样,投资者才能在现货白银投资中获取收益。在投资市场上,白银作为一种特殊的投资品种,一直以来都备受投资者们的…

JUC-CAS

1. CAS概述 CAS(Compare ans swap/set) 比较并交换,实现并发的一种底层技术。它将预期的值和内存中的值比较,如果相同,就更新内存中的值。如果不匹配,一直重试(自旋)。Java.util.concurrent.atomic包下的原…

Redis - redis.windows.conf配置文件及RDB和AOF数据持久化方案

Redis - redis.windows.conf配置文件及RDB和AOF数据持久化方案 Redis的高性能是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。 Redis支持两种方式的持久化…

【51单片机】点亮第一个LED灯

目录 点亮第一个LED灯单片机 GPIO 介绍GPIO 概念GPIO 结构 LED简介软件设计点亮D1指示灯LED流水灯 橙色 点亮第一个LED灯 单片机 GPIO 介绍 GPIO 概念 GPIO(general purpose intput output) 是通用输入输出端口的简称, 可以通过软件来控制…

数据库查询练习

数据准备 #建学生信息表student create table student ( sno varchar(20) not null primary key, sname varchar(20) not null, ssex varchar(20) not null, sbirthday datetime, class varchar(20) ); #建立教师表 create table teacher ( tno varchar(20) not null primary…

仿真机器人-深度学习CV和激光雷达感知(项目2)day04【简单例程】

文章目录 前言简单例程运行小海龟仿真启动节点查看计算图发布 Topic调用 Serviece 用 Python 发布和接收 Topic创建工作空间创建功能包,编译编写 Topic Publisher 节点编写 Topic Subscriber 节点运行节点 自定义消息类型用 Python 注册和调用 Serviece新建功能包在…

分类预测 | Matlab实现LSTM-Attention-Adaboost基于长短期记忆网络融合注意力机制的Adaboost数据分类预测/故障识别

分类预测 | Matlab实现LSTM-Attention-Adaboost基于长短期记忆网络融合注意力机制的Adaboost数据分类预测/故障识别 目录 分类预测 | Matlab实现LSTM-Attention-Adaboost基于长短期记忆网络融合注意力机制的Adaboost数据分类预测/故障识别分类效果基本描述程序设计参考资料 分类…

鸿蒙开发案例002

1、目标需求 界面有增大字体按钮,每次点击增大字体按钮,“Hello ArkTS”都会变大 2、源代码 Entry Component struct Page {textValue: string Hello ArkTSState textSize: number 50myClick():void{this.textSize 4}build() {Row() {Column() {//…

stm32 FOC 电机介绍

今年开始学习foc控制无刷电机,这几天把所学整理一下,记录一下知识内容。 前言: 为什么要学习FOC? 1.电机控制是自动化控制领域重要一环。 2.目前直流无刷电机应用越来越广泛,如无人机、机械臂、云台、仿生机器人等等。 需要什么基础&…

基于Springboot的大学生心理健康管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的大学生心理健康管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体…

MySQL安装及可视化工具SQLyog下载

编程如画,我是panda! 最近学习Web开发的时候要用到数据库,一开始下载的ZIP版本的,还得修改配置文件,挺麻烦的,后来发现可以直接使用msi版的安装包疯狂next,所以就出一期教程。 前言 MySQL 是一…

Database__进阶

文章目录 😊 作者:Lion J 💖 主页: https://blog.csdn.net/weixin_69252724?spm1000.2115.3001.5343 🎉 主题: 数据库mysql(高级部分) ⏱️ 创作时间:2024年01月24…

TortoiseSVN源码安装与迁移全攻略

一、前言 随着版本控制系统的普及,越来越多的开发者和团队开始使用SVN(Subversion)来管理代码。本文将详细介绍TortoiseSVN的源码安装及迁移过程,帮助您轻松掌握这一版本控制工具。 二、TortoiseSVN源码安装 依赖环境安装&…

thymeleaf常用语法大全

有时候需要借鉴别人的代码,发现一个相似的功能点,但是自己的是html页面别人的是jsp页面,那如果不了解thymeleaf的话还是要费点功夫的。 什么是thymeleaf,通俗点,jsp中的${},以及jstl中的if标签什么的都不能用&#xf…