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

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

  大家好呀,我是帅蛋。
  今天主要带大家玩儿一下数据结构与算法中比较重要的栈和队列,英文名 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 。
  栈和队列到这就讲完啦,哎呀妈呀画了这么多图可累死我了,虽然丑丑的...但是相信大家的收获也是巨大的。
  看到这的都是真爱, 点赞 记得帮我来一下呀,哈哈哈哈
  我是帅蛋,我们下次见!

被通知一个月后离职,我改了重要项目里的代码注释假如你已经对某个开发人员下发解雇通知,你还会让他深度参与重要项目甚至把项目做完再走吗?放在今天,这个答案往往是显而易见的不会。但如果是几十年前,那就未必了。来自程序员的报复近日Th1995年倪光南院士被联想扫地出门,柳传志泪洒现场,后来怎么样了联想集团在如今的网络上有这样一个问题经常被提起如果当年走倪光南的技术路线,现今的联想和中国半导体产业又会如何?会不会不再面临美国制裁的窘境?很遗憾,这个问题无法回答,历史没有如果。中方支持的黑客攻击印度电力设施?外交部回应4月7日,外交部发言人赵立坚主持例行记者会。有记者提问,有机构发布报告称,疑似中方支持的黑客攻击了印度的电力供应设施。中方对此有何评论?图源外交部赵立坚表示,我们注意到了有关的报道OPOOK10Pro外观确认,外观胚子对标真我GT2,5nm芯E4屏此前,OPPO早已全面公开OPPOK10系列的预热信息,将会与联发科合作,使用热度比较高的天玑8100芯片。近日,根据网络大V的爆料可以得知,OPPOK10系列拥有两款机型,标准版小米北京新总部概念规划,科技巨头新大楼都长这样?FTA建筑设计总部位于德国柏林,于美国迈阿密及中国上海设有设计机构。FTA崇尚国际化专业化一体化的品牌精神。作为一家专业化的设计集团公司,FTA主要聚焦于绿色办公产业园区城市综合体最快7月见!华为Mate50系列核心配置曝光将首发4G版骁龙8芯片这两个月来数码圈可以说热闹非凡,各大品牌的顶级旗舰新机层出不穷,让人眼花缭乱。不过由于众所周知的原因,华为这边却非常安静。往年在8月左右便推出的华为Mate系列,延期到现在都没有得为什么有的女性毛发旺盛,有的却很稀疏呢?看完涨知识了在如今这个爱美的时代影响下,越来越多的女性开始关注自己的外在形象和颜值,为了穿上漂亮的短裙吊带,女性出门前会提前将汗毛刮掉,即便不刮毛,也会穿上长衣长裤将自己裹得严严实实。那么为何多动症儿童的饮食禁忌,家长快收藏1。糖研究表明,经常喝含糖饮料(包括能量饮料)的儿童,多动症和注意力不集中的风险高出66。研究人员建议儿童少饮用含糖饮料,避免能量饮料。然而,不仅仅是青少年需要避免含糖饮料,成人多身体很多毛病与肝气郁结有关,老中医教你如何调理肝气郁结的现象在现代生活中很常见,有些人只是偶尔短期出现,有些则是长期存在,偶尔短期的出现并无大碍,通过调整一下饮食生活就能恢复正常。而长期的存在,则容易导致一系列的问题。首先,五投资了刘强东丁磊们的顶级大佬,在小区群求购牛奶面包4月7日,一则微信备注名称为徐新Kathy在上海某小区群内求购面包和牛奶的截图在互联网行业中流传开来。该图中的徐新被指系今日资本创始人,被称为投资女王的徐新,从而引发巨大的行业关注手把手来教你如何去创业手把手来教你如何去创业人最艰难的不是一个月挣三千块钱,挣三千块钱的时候,你基本上就每天偷盒饭。其实你还挺高兴的,就够花了。但是你挣一万多块钱的时候呢,就买了房,买了车按揭贷款。然后
任泉仅用一场饭局,就搞定了拳王邹市明退役后的工作头条创作挑战赛任泉为什么靠一场饭局就可以搞定拳王邹市明下半辈子的走向,作为当时名不见经传的二流演员任泉,是怎么成为资源大佬的,并且成功逆袭还在当时中国投资人排行榜上力压王思聪。那我山东港口渤海湾港向小货种精品港迈进近日,中宇28轮成功停靠在山东港口渤海湾港潍坊港区泊位,石油焦卸船作业有条不紊地进行着。这批来自印尼的石油焦即将由此运往腹地炭素厂加工,经高温煅烧后形成煅后焦,将从潍坊港启航,驶往去看不一样的西藏,探索古建筑的魅力,惊艳了时光,震撼绝美!古建筑的魅力,只有身临其境,才能真正感受恢宏壮观的气势。在的西藏,除了美到极致的高原风光,还有宏伟神圣的古建筑,有着厚重的历史感,到西藏游玩,这些宏伟的历史建筑值得一看!岁月漫长,东营人临时去山东省内其他地市发生医疗费了,怎么享受医保待遇?近年来,随着交通的便利,东营参保人经常会去山东省内的其他地市出差旅游,有时会突然发生疾病产生门诊或住院医疗费,能不能直接联网报销?需要备案么?今天就与大家详细的解说一下。一临时外出50位老同学齐聚东莞,连点10瓶52年茅台,结账时惊呆了,为何?3月14日,50位老同学齐聚东莞聚会一事被当地网友瞬间推上热搜!究其原因,是他们点酒时出现了插曲,最终导致每个人为此付出代价。此事一经爆出,网友纷纷炸锅,并对这件事评论不休。有人说答记者问丨山东将重点推进粮食产业储备产业供给要素高质量发展今天上午,省政府新闻办举行坚定不移推动高质量发展系列新闻发布会第十场,邀请省粮食和储备局主要负责同志等介绍高质量发展粮食产业提升粮食安全保障能力情况,并回答记者提问。齐鲁晚报记者吃赵本山5位门徒现状,有被扫地出门,有的街头卖菜,有的回村务农文顾远山编辑顾远山赵本山如今虽退出舞台,可他老人家的传说却仍在江湖上广为流传。赵本山都那么厉害,他教出的徒弟或许也差不到哪去。本想着名师出高徒,可谁知在了解他弟子的现状后,人们却有车珠英坦言裸戏是CG替身合成!为练习骂人,手机记事本全都是脏话头条创作挑战赛演员车珠英在话题热剧黑暗荣耀中饰演霸凌5人帮之一的崔惠程崭露头角,虽然她出生平凡家庭,在朋友间地位又不高,但凭借出众美貌最终成为了空姐。近日,车珠英接受采访,除了响应时隔20年再合作刘德华重新认识梁朝伟梁朝伟刘德华时隔20年再合作,电影金手指日前亮相香港国际影视展,导演兼编剧庄文强监制黄斌及主演梁朝伟刘德华蔡卓妍任达华方中信周家怡太保陈家乐岑珈其悉数到场。梁朝伟刘德华演绎的角色正央视315晚会曝光12宗罪3月15日晚8点,备受瞩目的中央广播电视总台第33届315晚会在中央电视台财经频道现场直播。今年315晚会的主题是用诚信之光照亮消费信心。在两个小时的直播节目中,提及假香米打脸化妆敢嘲讽成龙直男癌,凭实力获奥斯卡奖,杨紫琼的咖位究竟有多高如果您喜欢这篇文章,请点击右上方的关注。感谢您的支持和鼓励,希望能给您带来舒适的阅读体验。杨紫琼站在第95届奥斯卡颁奖典礼的舞台中央,眼带泪光地接过了奥斯卡最佳女主角奖,也就是我们