数据结构之受限线性表

受限线性表

对于一般线性表,虽然必须通过遍历逐一查找再对目标位置进行增、删和查操作,但至少一般线性表对于可操作元素并没有限制。说到这里,大家应该明白了,所谓的受限线性表,就是可操作元素受到了限制。
受限线性表可分为栈(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…

在浏览器输入一个url,浏览器会发生什么?

文章目录 在浏览器输入一个URL后,浏览器会经历以下主要的步骤: 1、URL解析: 浏览器首先会解析输入的URL,包括协议(比如http)、域名、端口、路径和查询参数等。 2、DNS解析: 如果输入的是域名而…

创作活动(九十三)———ChatGPT 和文心一言哪个更好用?

#ChatGPT 和文心一言哪个更好用?# 根据提供的搜索结果,ChatGPT和文心一言各有特点和优势,选择哪一个更好用取决于具体的应用场景和个人需求。以下是两者的对比: ChatGPT: 适用场景:适合需要生成大量知识性…

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

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

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

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

树的学习day01

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

【Docker】Docker学习② - Docker安装及基础命令介绍

【Docker】Docker学习② - Docker安装及基础命令介绍 一、Docker简介二、Docker安装及基础命令介绍1. Docker安装验证2. Docker存储引擎3 Docker服务进程4. Docker镜像加速配置 三、Docker镜像管理四、Docker镜像与制作五、Docker数据管理六、网络部分七、Docker仓库之单机Dokc…

kafka乱序消费可能的原因和解决方案

Kafka乱序消费可能的原因有以下几个: 分区顺序:Kafka中的消息按照分区进行存储和分发,每个分区内的消息是有序的,但不同分区之间的消息顺序是无法保证的。如果消费者在多个分区上进行并行消费,并且不处理消息的顺序&am…

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

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

javaweb总览

javaweb需要学习哪些技术 前端web开发: 技术描述HTML用于构建网站的基础结构的css用于美化页面的,作用和化妆或者整容作用一样JavaScript实现网页和用户的交互Vue主要用于将数据填充到html页面上的Element主要提供了一些非常美观的组件Nginx一款web服务…

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) 是通用输入输出端口的简称, 可以通过软件来控制…

我的2023年总结:旅行见天地,读书明事理,工作合行知

我的2023年总结 呵,时间过得真快啊! 有多快呢? 像烟花,一瞬间。 一瞬间 就在一瞬间 一场梦 梦了一千年 一转眼 只是一转眼 梦已醒 却过了一千年这是写年总结以来的第四年, 2023年往事回首三个字可概括:恍,荒,慌。 文章目录 我的2023年总结1、往年总结2、旅行如书2.1、…

数据库查询练习

数据准备 #建学生信息表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新建功能包在…

系统架构设计师教程(十四)云原生架构设计理论与实践

云原生架构设计理论与实践 14.1 云原生架构产生背景14.2 云原生架构内涵14.2.1 云原生架构定义14.2.2 云原生架构原则14.2.3 主要架构模式14.2.4 典型的云原生架构反模式14.3 云原生架构相关技术14.3.1 容器技术14.3.2 云原生微服务14.3.3 无服务器技术14.3.4 服务网格14.4 云原…

【Docker】Dokcer学习① - 简介

【Docker】Docker学习① - 简介 一、Docker简介1. Docker是什么2. Docker组成3. Docker对比虚拟机4. Linux Namespace技术5. Linux control groups6. 容器管理工具 二、Docker安装及基础命令介绍三、Docker镜像管理四、Docker镜像与制作五、Docker数据管理六、网络部分七、Dock…