#中队列的数据结构_数据结构与算法拓展(一)

栈与队列

  申明:由于篇幅限制,文章可能有些简略,如果大家想要详细了解,请一定要百度一下,并阅读例题,完成习题

绪言:计算机科学在过去的数十年内发展飞速,各种新颖的技术纷至沓来:5G,VR,AI;大数据,可视化,区块链;品种多样,令人目不暇接。可是在这繁多的技术与科技背后,却隐藏这这样一个亘古不变的公式。

算法  +  数据结构  =  大千世界

    算法的定义:解题方案的准确而完整的描述,是一系列解决问题的清晰指令。

    数据结构的定义:计算机存储、组织数据的方式。

    今天,让我们从最基础的数据结构——栈(Stack)和队列(Queue)开始,透过大千世界的幻影探索它的真实。

     栈和队列可以说是每一本的数据结构书都会加以介绍的最基本的数据结构,也是为数不多的线性数据结构。它们是所有数据结构初学者所必须掌握的知识。

     栈在百度百科上的定义:又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。如图

38a5b64fc40971cd6070f4a58ab54f4d.png

    队列在百度百科上的定义:和栈一样,队列是一种操作受限制的线性表,不同之处在于它只允许在表头进行删除操作,在表尾进行插入操作。如图。

0cdc120c660b14aed4786568dc1746e2.png

    由于都是受限制的线性表,所以在定义这两种数据结构的时候都只需要一个线性表A ,但在这两种数据由于操作不同,我们也需要两组不同的指针加以甄别。如图所示:

204c8558e1322959d9dbfaac6e7cf179.png

    栈和队列的操作很简单,栈只有在表尾进行插入和删除操作,也就是入栈和出栈;而队列也仅有在表尾进行插入和表头进行删除,也就是入队和出队操作。如图:

0775c338a15bae772ee791dc34242573.png

    上诉代码实现了一个基本的栈和队列的功能,有兴趣的同学可以把这段代码copy后运行,自己编制几组数据进行检验,如果能够用草稿纸模拟一下过程是再好不过。

    只不过,唯一有一些可惜的是上述代码中队列的实现似乎有一些浪费额外空间,这是由于队列进行出队操作后,队首指针之前的数据没有了再使用的可能性,却依然占用空间导致,这种队列称为顺序队列。

    解决方法有两种,一种是使用链表来实现队列,在队首元素出队后,直接释放指针空间,这种队列称为链式队列;另一种方法就是使用循环队列。如图:

ab4b16a3e399dc758e542629fd0789b9.png

    循环队列的核心是:在一定宽度范围内,保证每一个队内的元素反复使用宽度内的空间。实现的方式就是模运算一旦队尾或者队首超过宽度限制,通过取余运算使之返回限定的宽度的头部。

242b4cf1b3d58d1fb8c606c27e814df9.png

    这样,通过模运算,使得整个序列的宽度限制在lim内。值的一提的是,这时已经不能用p>q来表示队列已空,因为队列循环的情况下p>q是合法的。

    通过以上的描述,大家可能对栈和队列的基本知识有一定的了解,现在给出两道例题,尝试用这两种数据结构去解决一些实际问题。

b587131bb2aa593e651b37a7ce216d28.png

f30fcdd95c87c30cde4d058ca7004da8.png

f46fdb6dc85c73475daddc85bed2514c.png

    上述两道题详细的向我们描述了应该如何用栈和队列这种数据结构去解题。请详细揣摩,如果能够代码实现,一定会有很大的收获。

    从此,通过栈和队列中两种里程碑式的数据结构,我们进入了它的大门,而这也是我们学习它的开始。

    下面给出一些练习题,如果有兴趣,大家可以去尝试一二。

T1:https://www.luogu.com.cn/problem/P1044  栈的基础知识理解。

T2:https://www.luogu.com.cn/problem/UVA12265 类似例题1

T3:https://www.luogu.com.cn/problem/P1823 二分+栈

T4:https://www.luogu.com.cn/problem/P1886 例题2模板题

谢谢阅读。

写留言

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

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

相关文章

display属性_Numpy知识点(1)讲解实操安装/属性/数组创建/运算

# 1、安装包# pip install numpy #原生python安装# conda install numpy #Anaconda的安装# 使用Numpyimport numpy as np a np.arange(15) #生成0-14的一维数组display(a)display( )和print( )都是打印,在大多数编程软件上都使用print,jupyter notebook中我们可以使用d…

计算机英语短文互译,中英文互译的英语短文

在英语学习中,阅读能力是学习者发展其它语言能力(听、说、写、译)的基础。阅读能力的高低,不仅决定了学习者获取知识和信息的水平,而且在一定程度上也反映出学习者综合运用英语的能力。小编精心收集了中英文互译的英语短文,供大家欣赏学习!中英文互译的英语短文&…

springboot怎么设置多个路径全部跳转首页_SpringBoot(四)—Web开发(二)

这篇文章准备来记录一下一个restful风格小项目的流程,上篇文章为它做了一个基础,如果有什么错误希望大家能够指出。目录首页国际化登录拦截器CRUD一、首页在访问localhost:8080/的时候,默认访问首页在自己配置的SpringMVC的配置类中Configura…

计算机英语六级,英语六级作文范文:计算机

英语六级考试时间越来越近了,所以在备考的时候就更要掌握技巧,勤加练习。在备考英语六级写作时,学习一篇好的范文,会给复习带来事半功倍的效果。Using a computer every day can have more negative than positive effects on you…

python软件_Python自制照片美颜软件~

下午被一个骗子恶心到了,本来听公开课听得好好的,搞得心情极差,于是就中断了网课,听听音乐,写一下文章吧!前期准备①Python编译环境以及Python代码编辑器Pycharm的安装:请在【微信公众后台】找到…

数据集怎么导出_PCA算法 | 数据集特征数量太多怎么办?用这个算法对它降维打击...

今天是机器学习专题的第27文章,我们一起来聊聊数据处理领域的降维(dimensionality reduction)算法。我们都知道,图片格式当中有一种叫做svg,这种格式的图片无论我们将它放大多少倍,也不会失真更不会出现边缘模糊的情况。原因也很简…

html form callback,Promise异步编程模式总结初始化Promise对象统一错误处理PromisifyfromCallbackMongoose Promisify...

Promise是JavaScript中的一种异步编程范式, 一个Promise对象表示一个即将完成但还未完成的操作。 鉴于JavaScript中异步和回调的编程风格, Promise模式可以有效地避免『Callback Hell』。Promise 最初有q和bluebird等实现,在ES2015(ES6)提出后…

常用命令_GIT常用命令大全

Git 是一个很强大的分布式版本控制系统。它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势。克隆远程文件:git clone https://gitee.com/abcd/codefile.git projectgit checkout -b dev(本地分支名称) origin/dev(远程分支名称…

nvidia显示设置不可用_Nvidia显示设置不可用,您当前未使用连接到NVIDIA GPU的显示器的解决方法...

相信不少用户遇到这样一个问题,就是新购买的台式机电脑,配置达标的情况下,玩游戏出现卡顿不流畅的现象,准备在NVIDIA控制面板查看是否设置的问题,在打开NVIDIA控制面板的时候,提示了“Nvidia显示设置不可用…

html的id不能有.吗,html – 哪些DOM元素不能接受id?

在HTML5中,id属性是global attribute,可以在任何元素上指定.如果你看看Document Type Declaration for HTML4,你可以找到没有%attrs的元素;在他们的属性列表中定义,表示它们不支持id属性.那些包括在“文档头”部分的底部附近:HEAD,TITLE,BASE,META,STYLE…

oracle tns 代理配置_Toad for oracle安装配置与使用

一.toad安装与配置注意:toad的使用本机电脑必须安装完整版oracle客户端,不能是精简版的.1.1完整版oracle客户端的安装.1.解压文件,安装oracle客户端打开安装包,找到setup.ext,开始安装。提示下图弹窗,可根据此网址内容进行更改(https://blog.…

吴枫 python小课账号_无门槛速学编程——Python小短课,自上而下分而治之

【Python小短课 11】自上而下,分而治之 做任何事都需计划,编程也是。 譬如写文章要列大纲、作画要想布局,编程也需先谋全局,而后思虑细节。 就以上回说到的“找宝藏”这个程序举例,最顶层的需求自然就是“找宝藏”&…

计算机本地磁盘D无法扩展,计算机上的本地磁盘D突然无法打开,表明它需要格式化...

接受使用数据恢复软件将重要数据保存到其他磁盘FindDate特定操作: 运行软件----“打开”后,将显示要还原的驱动器. C \ D \ E \ F选择您要还原的一个,它将开始. 扫描后,再次保存扫描的文件. 哈哈,希望对您有所帮助.最后&#xff0…

caffe运行不停止_caffe(gpu)安装过程及问题解决

2019.12.05 caffe(gpu)安装参考网址:教程1:weiliu89/caffe​github.com教程2:https://blog.csdn.net/yggaoeecs/article/details/79163789​blog.csdn.net环境:Ubuntu16.04cuda10.0安装过程:git clone https://github.…

2021年考计算机考研三战,2021考研的小伙伴有3条忠告一定要记得,这些都是历年实战经验...

2021考研的小伙伴有3条忠告一定要记得,这些都是历年实战经验,考研一定要记得避开三个大坑。1,分数线低的学校就一定容易考。有一些学校分数线看着很低但实际上难度不低,比如首都师范大学 ,很多专业就是国家线录取甚至招…

c++ 返回string_JVM系列之:String.intern和stringTable

简介StringTable是什么?它和String.intern有什么关系呢?在字符串对象的创建过程中,StringTable有起到了什么作用呢?一切的答案都在本文中,快来看看吧。intern简介intern是String类中的一个native方法,所以它…

conda install 换源_ubuntu更换pip install,apt-get,conda install 成国内源

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe mu…

python帮助文档中查看内置函数_PYTHON官方文档内置函数整理

一、数学运算类 abs(x) 求绝对值 1 、参数可以是整型,也可以是复数 2 、若参数是复数,则返回复数的模 complex([real[, imag]]) 创建一个复数 divmod(a, b) 分别取商和余数 注意:整型、浮点型都可以 float([x]) 将一个字符串或数转换为浮点数…

计算机二级指针,C语言——二级指针

二级指针的概念首先任何值都有地址,一级指针的值虽然是地址,但这个地址做为一个值亦需要空间来存放,是空间就具有地址,这就是存放地址这一值的空间所具有的地址,二级指针就是为了获取这个地址,一级指针所关…

华为 虚拟键盘_华为mate30 pro虚拟机械键盘特有体验,虽是虚拟,但却感受逼真...

华为Mate30 pro已于26日在国内正式发布了。此外,根据了解华为Mate30系列现在已经突破了5亿的销售额。看来,华为的这个下半年旗舰手机非常受欢迎啊。华为Mate30系列现在在国内已经发布了,其整体感官看上去与海外的没有多大的区别。其实&#x…