热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

顺序栈的基本操作_数据结构(一)栈结构

数结STRUCTUREDATA据构栈结构STACK前言在计算机中存储数据需要用到各种数据结构,一起来了解下栈结构吧。栈结构介绍在计算机的世界里经常会接触到各种数据结构
685a54ee4515ed3a03828b7fd4baf0e1.png

STRUCTURE

  DATA

栈/结/构 S/T/A/C/K

de39ac36b4d39710a09745cfc9e559f7.png

前言

在计算机中存储数据需要用到各种数据结构,一起来了解下栈结构吧。

7bb8af51804a755911be420a37d60296.png

栈结构介绍

    在计算机的世界里经常会接触到各种数据结构,例如栈、队列、链表等等。这篇文章就带大家了解一下其中之一的栈结构。

    栈结构的宗旨就是先进后出(FILO, First in Last out),即先进入栈中的元素会在最后才能弹出。栈结构用图形来表达的话就是这样:

55494e061d19e22dfba1da562cbac088.png7bb8af51804a755911be420a37d60296.png

栈结构的操作

    栈的操作有两个:“压入”和“弹出”。压入栈和弹出栈就是对应添加数据和删除数据,上一节中的栈结构的介绍即是栈的压入操作。至于为什么这样叫呢?相信你看了下面的“弹出”就会理解了。

1a4599dc0e6372451054e2b9a716e728.png

    看起来就像是从栈中弹出了有木有?“熊二”在从栈中弹出后,栈中就只剩下了“喜羊羊”。细心的小可爱可能已经发现了:栈的压入顺序是喜羊羊先进来,其次才是熊二。但是弹出的顺序是熊二先弹出。为什么喜羊羊不能先弹出?因为熊二压在它的上面,它想要弹出栈必须先把熊二弹出,如果上面有更多的元素的话,依次类推。

    这个原理就叫做“先进后出”,先进入栈的元素会被压在最下面,必须等到上面的一个个元素都弹出了,它才能弹出。

00fcf3d06f331c62783934354be689d7.png00fcf3d06f331c62783934354be689d7.png

压入、弹出操作的练习

    给大家出个题:依次向栈中压入1、2、3、4、5五个元素,然后依次弹出,弹出的顺序是什么呢?

    给大家五秒钟的时间考虑一下:

    答案:依先进后出原则,答案应该是:5、4、3、2、1。

    假如我们限制入栈顺序是5、4、3、2、1,那么下列哪种不是一个合法的出栈序列?

    A. 45123

    B. 34125

    C. 52314

    D. 12435

    大家要知道,栈并不是统一入栈,全部入完后才能出栈,而是入栈出栈的时机都可以是自定义的,只要你想,可以随时入栈和出栈。

    我们来看选项A:

    我们知道,入栈顺序是5、4、3、2、1,但是A的第一个弹出是4,那么就代表我们要在栈顶是4时进行弹出,那么前两次入栈大概是这样:

e0323b72cb5f9a95886ecb79648c9f37.png

    此时按题目要求,我们下此压入就该压入“3”了,但是选项A要求的出栈顺序是45123,第一个要弹出的元素是“4”,所以我们不能继续入栈了,要将元素“4”弹出,就像这样:

5519307a344821b16be2134daa6c59c6.png

    此时45123第一个元素4已经实现,接下来需要弹出的元素是“5”,我们发现栈顶(指在栈的顶部,随时可能被弹出的元素)正好是5,所以我们先不入栈,直接出栈,像这样:

2a65709b45fa48d098f32df73f0fdd93.png

    OK,那么接下来前两步就完成了,现在栈中已没有了数据,接下来再向栈中压入吧。

2cf9f9d48f894493fa036bc0b8de3ba2.png

    我们需要的下一个弹出元素是1,但是栈顶现在是3。所以继续压入吧。

809ad6ab7845ffab3769716df5e7b613.png

   直到压入最后一个元素1后,才可以满足45123的1的弹出。我们已经没有其他元素可以压入了,所以直接弹出:

0eb44420cf5961b646408f25297142a4.pngfa906022b3eb0aa5d057e2d35902b005.png15bab66223341381c871761fd165c538.png

    OK,此时栈中元素已全部弹出了,我们来看我们的弹出顺序:4、5、1、2、3。

   滑上去看下选项A的弹出顺序,是不是一样呢?

    这样就说明A选项的弹出顺序是可行的,只要按照我们的入栈出栈步骤就行,那么选项A符合条件。

    接下来请大家画图并思考B、C、D是否合法,并选出正确答案。

    栈结构的基本操作就讲到这了,有同学可能就要问了:这种结构限制性这么强,只能以这种方式进行元素的加入、删除,它到底有什么作用呢?敬请听下回分解(十进制转二进制的运算)。

~ THE END ~




推荐阅读
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • 本文深入探讨了UNIX/Linux系统中的进程间通信(IPC)机制,包括消息传递、同步和共享内存等。详细介绍了管道(Pipe)、有名管道(FIFO)、Posix和System V消息队列、互斥锁与条件变量、读写锁、信号量以及共享内存的使用方法和应用场景。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • 本文详细介绍了Java中实现异步调用的多种方式,包括线程创建、Future接口、CompletableFuture类以及Spring框架的@Async注解。通过代码示例和深入解析,帮助读者理解并掌握这些技术。 ... [详细]
  • 本文探讨了如何通过一系列技术手段提升Spring Boot项目的并发处理能力,解决生产环境中因慢请求导致的系统性能下降问题。 ... [详细]
  • 本文档汇总了Python编程的基础与高级面试题目,涵盖语言特性、数据结构、算法以及Web开发等多个方面,旨在帮助开发者全面掌握Python核心知识。 ... [详细]
  • 使用WinForms 实现 RabbitMQ RPC 示例
    本文通过两个WinForms应用程序演示了如何使用RabbitMQ实现远程过程调用(RPC)。一个应用作为客户端发送请求,另一个应用作为服务端处理请求并返回响应。 ... [详细]
  • 深入解析Hadoop的核心组件与工作原理
    本文详细介绍了Hadoop的三大核心组件:分布式文件系统HDFS、资源管理器YARN和分布式计算框架MapReduce。通过分析这些组件的工作机制,帮助读者更好地理解Hadoop的架构及其在大数据处理中的应用。 ... [详细]
  • 深入解析BookKeeper的设计与应用场景
    本文介绍了由Yahoo在2009年开发并于2011年开源的BookKeeper技术。BookKeeper是一种高效且可靠的日志流存储解决方案,广泛应用于需要高性能和强数据持久性的场景。 ... [详细]
  • 本文详细探讨了Java中Volatile关键字的工作原理、优化技巧及其在实际开发中的应用场景,特别是在提高多线程环境下数据可见性和减少锁竞争方面的优势。 ... [详细]
  • 本文详细介绍了队列与栈这两种基本的数据结构。队列是一种遵循先进先出(FIFO)原则的线性数据结构,允许在队首进行删除或读取操作,在队尾进行插入操作。而栈则是另一种线性数据结构,它遵循后进先出(LIFO)的原则,所有操作均在同一端进行。 ... [详细]
  • Go语言以其简洁的语法和强大的并发处理能力而闻名,特别是在云计算和分布式计算领域有着广泛的应用。本文将深入探讨Go语言中的Channel机制,包括其不同类型及其在实际编程中的应用。 ... [详细]
  • 前言无论是对于刚入行工作还是已经工作几年的java开发者来说,面试求职始终是你需要直面的一件事情。首先梳理自己的知识体系,针对性准备,会有事半功倍的效果。我们往往会把重点放在技术上 ... [详细]
  • 本文探讨了大型服务端开发过程中常见的几个误区,包括异步任务处理不当、日志同步模式使用、网络操作未设置超时、缓存命中率及响应时间未统计、单一缓存模式、分布式缓存加锁不当以及团队管理上的误区,旨在帮助开发者避免这些常见错误。 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
author-avatar
地平线1232502881827
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有