范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

稳了,一文学会栈和队列!

  大家好呀,我是帅蛋。
  今天主要带大家玩儿一下数据结构与算法中比较重要的栈和队列,英文名 Stack and Queue,线性数据结构的典型代表,数组和链表的兄弟姐妹。
  下面,让我们来看看,它们是有多简单。
  文章导读栈
  栈是一种 后进先出 (Last in First Out)的数据结构,简称  LIFO 。
  啥叫后进先出呢?这就打枪一样,弹夹中最先插进去的子弹最后才打出去,越晚摁进去的子弹越早打出来。
  别小看它,栈是一种很重要的编程概念,它在软件应用中很常见。我们每天都用到的浏览器就用到了,浏览器的"后退"按钮。
  比如臭宝上班的时候正在浏览器上看 @编程文青李狗蛋 的技术文,此时弹出一个保持男性持久的框框,"不小心"点到了,正看的入迷的时候你的老大路过,此时拿出单身 N 年的手速点击后退,你老大一看你在看帅蛋的文章,赞赏你是积极上进的员工,奖励手纸一卷。
  看,"后退"是多么的有用
  栈的定义
  那么,到底怎么定义栈呢?
  很简单。
  栈是限制仅在表的一端(表尾)进行操作(插入和删除)的线性表。
  表尾又叫 栈顶 (Top),允许插入和删除,那么另一端就叫做 栈底 (Bottom),啥也不能干,只能干等着第一个进栈的过来躺着。
  栈的插入操作,叫做 入栈(push) 。存入栈的元素之间没有任何具体的关系,只有到来的时间的先后顺序。
  入栈操作涉及的单个数据的进入,所以时间复杂度为 O(1),同时入栈过程中只需要单个的临时存储空间,所以空间复杂度为 O(1)。
  栈的删除操作,叫做 出栈(pop) 。删完了,也就是栈底就是栈顶的时候,就叫 空栈 。
  同理,出栈操作涉及个别数据的出去且出栈过程只需要单个的临时存储空间,所以时间复杂度和空间复杂度都为 O(1)。
  存入栈的元素之间没有任何具体关系,只有到来的时间的先后顺序.在这里没有元素的位置、元素的前后顺序等概念。
  栈的存储结构
  在上面说过, 栈是线性表,那么它同样有顺序存储和链式存储 。
  顺序存储
  顺序存储的栈叫做 顺序栈 。
  顺序栈使用数组实现,下标为 0 的一端作为栈底,使用 top 做为栈顶,它来指示当前栈顶元素的位置,默认 top = -1 时为空栈。
  链式存储
  链式存储的栈叫做 链栈 。
  链栈用单链表实现,一般尾节点为栈底,使用头指针指向的节点作为栈顶,不需要头节点。top = NULL 为空栈。
  啥同时因为顺序和链式本身的存储特点, 顺序栈的元素个数是固定值,存在栈满的情况,而链式栈则不存在栈满的情况 ,除非内存被塞的满满的。 队列
  队列是一种 先进先出 (First in First Out)的数据结构,简称  FIFO 。
  啥叫先进先出呢?这就和排队上厕所,谁先到谁先嘘嘘,到的晚的只能忍住。
  同比栈,队列在软件应用中也很常见,就像现在我在一个字母一个字母的敲,最后输出在屏幕上你看到的一个个的字,这些就是最常见的队列的应用。
  队列的定义
  类比栈,怎么定义队列呢?
  队列是限制仅在一端进行插入操作,在另一端进行删除操作的线性表。
  允许删除的一端叫做 队头 ,允许插入的一端叫做 队尾 。队列的插入叫做 入队列 ,队列的删除叫做 出队列 。
  队列的存储结构
  同为线性表, 队列也有链式存储和顺序存储 。
  链式存储
  链式存储的队列叫做 链队列 。
  其实这就是单链表,而且是带头节点的单链表,这样的话对于入队或者出队来说,它们的时间复杂度与单链表的插入和删除的时间复杂度都是一样的,都是 O(1)。
  在此,头节点指向队头,用 head 指向头节点,tail 指向队尾。
  当 head 和 tail 都指向头节点时,为空队列 。
  顺序存储
  顺序存储的队列用数组实现。数组下标为 0 的一端为队头,用 head 指向,队尾用 tail 指向。
  假设队列能存 5 个元素, 当 head = tail,队列为空队列 。
  从上图的空栈中,A B C 依次入队,
  执行三次入队操作,此时head = 0,tail = 3。可以看出,当入队列的时候,数据直接按序存储到数组中,时间复杂度为 O(1)。
  如果此时要执行两次出队操作。
  执行两次出队操作,相当于删除了 A B,此时 head = 2,tail = 3。从这可以看出,出栈的时间复杂度也是 O(1)。
  是不是现在想说一句:就这?
  还真不是就这。此时我再入两次队列。
  这个时候问题来了,我就大小为 5,数组最后一个元素已经被占了,此时再入栈的话,就数组越界了,但是我这个队列明明没满,我下标是 0 和 1 的位置还空着,这咋整?
  不慌,两种办法。
  第 1 种, 满了就向前跑 。
  每次当 tail = n 的时候,所有的元素搬到 0 ~ (tail-head)的位置,这个时候入队的时间复杂度是 O(1) 或者 O(n),出队的时间复杂度也是 O(1)。
  出队这个时间复杂度好理解,主要是入队为啥是 O(1) 或者 O(n)估计有点难理解。
  可以这么来想,对于为 n 的数组,对于 tail 指向下标为 0 ~ (n-1) 的来说,入栈的时间复杂度都是 O(1),唯一不一样的是,当 tail = n 的时候数值需要向前跑,对于此时这步动作来说,时间复杂度为 O(n)。
  跑动的这一步的 O(n) 可以均摊到 0 ~ (n-1) ,那么对于入队来说,平均时间复杂度就是 O(1)。
  第 2 种, 满了从头再来 。
  怎么从头再来呢?
  当队列满了,那就是 tail = n,前面如果有空,那 tail = 0 不就又能再来啦。
  怎么让 tail = n 了以后再编程 tail = 0,那不就是首尾相连, 循环队列 就这么闪亮登场了。
  循环队列
  循环队列,就是队列的队头和队尾相接的顺序存储结构 。
  如果是循环队列的话,那当队列满了 tail 不需要等于 n ,直接指向了下标为 0 的位置。
  如果此时要执行入队操作,那就会变成:
  如果想更直观一些,我可以把它掰弯了给大家看。
  你仔细看上面那张图,你会发现一个问题,如果再入队一个元素的话,队列满了,此时 tail = head。
  那问题来了,队列空的时候 tail = head,现在队列满了,也是 tail = head,我傻了呀,我怎么知道现在的队列是啥状态呢?
  那只能有一者做出牺牲了,空队列啥也没有,显然和个废物没啥两样,所以只能满队列做牺牲,牺牲一个位置啥也不放,也就是 tail 和 head 相差为 1 的时候就队列满了。也就是下面这种。
  因为 tail 可能比 head 大(正常占用完)也可能比 head 小(做了循环),所以判断队列满的条件就成了  (tail + 1) % n = head 。
  栈和队列到这就讲完啦,哎呀妈呀画了这么多图可累死我了,虽然丑丑的...但是相信大家的收获也是巨大的。
  看到这的都是真爱, 点赞 记得帮我来一下呀,哈哈哈哈
  我是帅蛋,我们下次见!

拉丁美洲的发达国家乌拉圭说起乌拉圭这个国家,很多人可能不太熟悉,甚至有可能和巴拉圭(Paraguay)这个国家弄混淆,毕竟名字非常相似,就差一个字。但是经常看足球的朋友应该知道乌拉圭,特别是美洲杯足球赛和今年火了一种上衣叫挤奶衫,难得一见的洋气,美得气质又高级在时尚圈,每年都会推出很多新潮的服装款式,其中不乏一些比较新颖的款式,这些款式往往能够让人眼前一亮,穿起来也会显得很有魅力,今年流行一种挤奶衫,比吊带还性感,比T恤更时髦,能够很好看到70岁尊龙才发现真正的男神才不怕变老,头发花白也优雅帅气身边总是有很多男生,会为自己的发型而感到烦恼,因为一个男人的发型就是他的面子,甚至直接可以影响到整个人的气质状态,所以说,发型一旦没有选对,就算长的再帅身材再好也白搭,上了年纪之后答应我,上了年纪的女人尽量少穿卫衣衬衫,多穿这三件会更优雅可爱甜美是给少女的形容词,优雅气质是成熟女人的标志词。只有在上年纪后穿对衣服的人才知道,可爱不仅在性感面前一文不值,在优雅面前更不值一提!一岁比一岁更出色,完全可以通过合适的穿衣打雪后的太行山中小城山西长子银装素裹美如画卷雪后的羊头山森林公园。刘峰摄树木山峦等被白雪覆盖,别有一番风味。刘峰摄雪后的长子银装素裹。刘峰摄枝头挂满白雪。刘峰摄雪后的小城山西长子银装素裹美如画。刘峰摄台阶树木与皑皑白雪相映成春季适合喝什么茶?每次小长假过后大家都多多少少会有点假期综合症,再加上此时气温日渐升高春困来袭,更是让困倦的身心愈发动力不足。很多人特别是办公一族习惯喝咖啡来提神醒脑,其实喝茶同样是不错的选择,喝对早上起床,嘴巴苦苦的?可能的原因,本文都给你列出来了在日常生活之中,几乎每个人存有一定的口腔疾病,主要表现为口干舌燥口腔异味牙龈肿痛这些。绝大多数的缘故都是由于口腔健康导致的。很多人在清晨醒来以后,一直感觉自身嘴里发苦,那有这种情况让你充满活力的睡眠秘诀是什么?睡眠是人体重要的生理需求之一,良好的睡眠质量对于养生十分重要。以下是几个有用的建议,可以帮助您保持良好的睡眠质量。保持规律的睡眠时间尽量保持每晚相同的睡眠时间,并避免熬夜或睡过度。患上静脉曲张无计可施?可以试下4种方法,或许简单又有效进到秋冬季天气寒冷,干燥,也给医治静脉曲张的路面又增加了一点难度。有很多患有静脉曲张的病人,应对诸多的治疗方法造成了疑惑,不清楚如何挑选才好。有时民俗的很多小秘方,无需花多少钱,也神奇的草药(十一)擅治牙痛之细辛,通窍止痛之要药别名小辛(神农本草经),细草(吴普本草),独叶草金盆草(中药材手册),山人参(江苏),大药(山东)。炮制夏季果熟期或初秋采挖,除净地上部分和泥沙,阴干。切段生用。按产地分为辽细辛汉单味中药有奇效,祛斑养颜抗衰老(人参)微风人参虚劳内伤第一药微风太阳人参因外形形似人体而得名,古人又称其为黄参神草地精,为百草之王,是闻名遐迩的东北三宝之一。本品味甘,微苦性温,入脾肺经,具有大补元气,固脱生津,安神益
印钞票的报应是滞胀还是智障?知识辞海滞胀危机一无中生有的金融炼金术从古至今,炼金术士们一直在追求点石成金奥秘,但是除了个别神经病宣称自己成功之外,这一领域一直都还是业界空白。1930年大萧条席卷全球,各国政府都穷得叮当响。这为什么要发展数字人民币?目前,全球已有60多个国家开始了数字货币试验。自2014年中国人民银行数字货币研究小组的设立,数字人民币的发展与应用也提上日程。随着数字货币相关法律和制度的不断完善设立,数字人民币让你觉得一辈子都写不出来的一百条潇洒句子1,我于窗中窥伤鹤,恰如仰头见春台。2,鹤别空山,今春不见桃花。3,人间天上,看莺莺强如做道场,软玉温香,休道是相亲傍。4,背对山河,踏清风明月。5,若有长风绕旗,那便是我在想你了宋氏三姐妹成长的故事了解民国历史的朋友,谈起宋氏三姐妹应该都不会陌生,在20世纪的中国,出了宋蔼龄宋庆龄宋美龄三姐妹的宋氏家族,可以说是这个世纪最辉煌的家族。宋氏三姐妹,是20世纪中国最显耀的姐妹组合新385旅组建,陈锡联担任旅长,手下都有哪些团级将领?八路军成立,陈锡联是769团的团长,这个团隶属于385旅,385旅的旅长是王宏坤。王宏坤率领一个团留在陕北,而陈锡联却带着另一个团开赴抗日前线。陈锡联在抗日战场名气是很大的,夜袭阳奇袭白虎团还有一支神勇的小分队,战斗惊险激烈,毙敌200多人说起抗美援朝战争中我军侦察排副排长杨育才和化袭班英雄们奇袭白虎团团部的战斗,很多朋友都不会陌生。其实,歼灭南朝鲜军白虎团的战斗,是一次系统性很强的大规模战役性作战行动。在这次战役中山西夜空突现极光云,太阳活动又在冲击地球?分析不用担心近日,有不少北方的山西内蒙古北京等地的网友反映,在12月11日下午到傍晚前后,天边出现了怪异的发光云带,在傍晚的暮色中这道云带有着金色的光芒,云带一端盘曲蜿蜒,像是一道甩在天边的丝什么是爱因斯坦罗森桥,虫洞是什么?虫洞是描述爱因斯坦广义相对论的方程的特殊解,它通过隧道连接两个遥远的空间或时间点。理想情况下,这条隧道的长度小于这两点之间的距离,使虫洞成为一种捷径。尽管它们是科幻小说的主要内容并恐怕是每个男人都无法抗拒的独享时刻GOOVISPro使用分享前言很早以前玩过VR,在里面看VR视频,玩游戏都有不错的的体验,不过分辨率还是稍微差了一点,比较认可的是VR游戏体验还是不错的,很新奇。如果要看电影,想有更好的分辨率更好的体验,还华为一体机matestationx开箱总结帮客户激活一台一体机,激活过程很惊艳,做工比我想象的精致很多,配套送了键盘鼠标,机身侧面电源键集成了指纹解锁,指纹电源厚度可以接受,毕竟一体机嘛,整个主板部分全部放在了背后的支柱上王者荣耀想赢就得学会补位有办法吗?没有办法的。我已经悟道了。想赢就得玩肉。主动选肉。因为根本没人选坦克。你逼队友去玩肉队友不想玩肉他就开始搞事,因为他已经不想玩了。想赢的人一般都会主动去选坦克选辅助,因为