数据结构之受限线性表

news2024/12/24 11:35:06

受限线性表

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

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

相关文章

【数据库连接】连接sqlite3报错:go-sqlite3 requires cgo to work. This is a stub

报错信息 register db Ping default, Binary was compiled with ‘CGO_ENABLED0’, go-sqlite3 requires cgo to work. This is a stubWindows解决办法 新建环境变量 新报错 Failed to build the application: # runtime/cgo cgo: C compiler “gcc” not found: exec: “gc…

如何为视频内多角色进行翻译配音?含教程和案例

多角色翻译配音有哪些实用场景? 多角色翻译配音可以应用于任何需要在音频或视频中区分不同角色的情境中,以提高听众的理解和体验。这些场景都需要专业的配音演员和翻译人员来确保高质量的表现。多角色翻译配音在不同情境下都可以有实用场景,…

堆的概念,性质及其实现

1.堆的概念及结构 如果有一个关键码的集合K { &#xff0c; &#xff0c; &#xff0c;…&#xff0c; }&#xff0c;把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中&#xff0c;并满足&#xff1a; < 且 < ( > 且 > ) i 0&#xff0c;1&#x…

系统移植,GNU命令,Uboot移植

一.GNU命令 1、addr2line 把程序地址转换为文件名和行号 做调试 2、ar 建立&#xff0c;修改&#xff0c;提取归档文件 3、Id:GNU arm-none-linux-gnueabi-ld start.o main.o -Tmap.lds -o uart.elf 链接器 4、as 主要用来编译GNU编译器gcc输出的汇编文件&a…

JVM实战(31)——内存溢出之请求超时

一、简介 本章&#xff0c;我们将通过实际案例讲解一个Web应用的内存溢出问题&#xff0c;该内存溢出问题的排查涉及Tomcat的一些底层原理&#xff0c;最终排查发现是由于请求超时问题导致&#xff0c;我们先来看下系统的背景。 1.1 系统背景 生产环境的一个系统发生告警&…

PyTorch内置损失函数汇总 !!

文章目录 一、损失函数的概念 二、Pytorch内置损失函数 1. nn.CrossEntropyLoss 2. nn.NLLLoss 3. nn.NLLLoss2d 4. nn.BCELoss 5. nn.BCEWithLogitsLoss 6. nn.L1Loss 7. nn.MSELoss 8. nn.SmoothL1Loss 9. nn.PoissonNLLLoss 10. nn.KLDivLoss 11. nn.MarginRankingLoss 12. …

sylar高性能服务器-日志(P26-P29)内容记录

文章目录 P26&#xff1a;协程01一、方法函数二、结果展示 P27-28&#xff1a;协程02-03一、方法函数二、结果展示 P29&#xff1a;协程04一、方法函数二、结果展示 P26&#xff1a;协程01 ​ 本节内容主要介绍了开始协程的一些准备工作&#xff0c;平常我们使用assert断言时&…

香港web3盛会:Unisat确认参加Big Demo Day项目路演

本次“Big Demo Day”将于1月31日举办第十期&#xff0c;是由Zeepr 总冠名&#xff0c;Central Research、Techub News联合主办、数码港、852web3支持举行的大型线下活动。Big Demo Day集结了Web2和Web3行业精英聚焦香港市场。 Unisat确认参加 Big Demo Day 线下活动&#xff0…

HIS项目介绍、项目环境准备、版本控制介绍、Git基础、Git指针、Git分支、Git标签

案例1&#xff1a;项目环境准备 环境准备说明&#xff1a; 本阶段共使用虚拟机6台&#xff0c;操作系统使用RockyLinux8.6 环境准备要求&#xff1a; 最小化安装即可配置好主机名和IP地址搭建好yum源关闭防火墙和SELinux!!! 项目主机列表 主机名IP地址规格角色服务Progra…

python内置函数有哪些?整理到了7大分类48个函数,都是工作中常用的函数

python内置函数 一、入门函数 1.input() 功能&#xff1a; 接受标准输入&#xff0c;返回字符串类型 语法格式&#xff1a; input([提示信息])实例&#xff1a; # input 函数介绍text input("请输入信息:") print("收到的数据是:%s" % (text))#输出…

“趣味夕阳,乐享生活”小组活动(第二节)

立冬以来&#xff0c;天气日渐寒冷&#xff0c;气温变化较大&#xff0c;各种传染病多发&#xff0c;为进一步增强老年人冬季预防传染病保健意识及科学合理健康的生活方式。近日&#xff0c;1月22日&#xff0c;南阳市人人社工灌涨站开展了“趣味夕阳&#xff0c;乐享生活”小组…

在IntelliJ IDEA中通过Spring Boot集成达梦数据库:从入门到精通

目录 博客前言 一.创建springboot项目 新建项目 选择创建类型​编辑 测试 二.集成达梦数据库 添加达梦数据库部分依赖 添加数据库驱动包 配置数据库连接信息 编写测试代码 验证连接是否成功 博客前言 随着数字化时代的到来&#xff0c;数据库在应用程序中的地位越来…

RS450服务器硬盘亮黄灯故障及从MegaRAID9240-4i阵列卡的恢复业务过程

最近一台ThinkCenter RS450服务器硬盘亮黄灯&#xff0c;引起进入系统很慢&#xff0c;于是将业务系统备份后&#xff0c;对该服务器硬盘进行修复。 该服务器的总共三块硬盘组件了Raid5&#xff0c;因此待第一块盘亮红灯后&#xff0c;尝试进入Raid管理器&#xff0c;将报错的…

gitlab备份-迁移-升级方案9.2.7升级到15版本最佳实践

背景 了解官方提供的版本的升级方案 - GitLab 8: 8.11.Z 8.12.0 8.17.7 - GitLab 9: 9.0.13 9.5.10 9.2.7 - GitLab 10: 10.0.7 10.8.7 - GitLab 11: 11.0.6 11.11.8 - GitLab 12: 12.0.12 12.1.17 12.10.14 - GitLab 13: 13.0.14 13.1.11 13.8.8 13.12.15 - G…

HTML小白入门学习-列表标签

前言 在上一篇文章中&#xff0c;我们学习了下图所示的几个文本格式标签&#xff0c;分别是加粗、斜体、下划线、删除线、下标和上标&#xff0c;忘记了的小伙伴可以回去再看看哦。 在网页中&#xff0c;我们也会经常看到列表&#xff0c;比如某资讯网页的信息列表&#xff…

C# Bitmap类学习1

Bitmap对象封装了GDI中的一个位图&#xff0c;此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义的图像的对象。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using …

【新加坡机器人学会支持】第三届工程管理与信息科学国际学术会议 (EMIS 2024)

第三届工程管理与信息科学国际学术会议 (EMIS 2024) 2024 3rd International Conference on Engineering Management and Information Science 【国际高级别专家出席/新加坡机器人学会支持】 第三届工程管理与信息科学国际学术会议 (EMIS 2024)将于2024年4月12-14日在中国洛…

SpringBoot项目多数据源配置与MyBatis拦截器生效问题解析

在日常项目开发中&#xff0c;由于某些原因&#xff0c;一个服务的数据源可能来自不同的库&#xff0c;比如&#xff1a; 对接提供的中间库&#xff0c;需要查询需要的数据同步数据&#xff0c;需要将一个库的数据同步到另一个库&#xff0c;做为同步工具的服务对接第三方系统…

黑马Java——面向对象进阶(static继承)

1.static静态变量 静态变量是随着类的加载而加载的&#xff0c;优先与对象出现的

“豚门”、“吗喽”,为啥品牌宣传瞄上网红动物?

近期&#xff0c;新茶饮品牌喜茶联名红山动物园&#xff0c;凭借可爱周边拿捏无数消费者&#xff0c;再往前一段时间&#xff0c;还有奈雪联名“吗喽”表情包&#xff0c;为什么品牌宣传会瞄上网红动物&#xff0c;今天媒介盒子就来和大家聊聊。 一、 萌元素引起用户情绪共鸣 …