利用栈来判断元素出入栈顺序的合法性

  • 例如:入栈的序列(1,2,3,4,5),出栈序列为 (4,5,3,2,1)
  • 解决思路如下:
  • 我们设置一个中间栈:tempStack,记录一个出栈顺序下标index
    1、按入栈顺序,存入一个元素到tempStack中
    2、比较tempStack的栈顶元素与出栈顺序的第index个元素比较
    相同,则进行3,否则进行1
    3、弹出tempStack的栈顶元素,index++。执行2。
    最后,如果循环结束后,tempStack为空,则表示出栈顺序正确。否则,出栈顺序错误。
void CheckPushPopStackLegal()
{Stack s;int PushArray[] = { 1, 2, 3, 4, 5 };int PopArray[] = { 4, 5, 1, 2, 3 };int index = 0;int i = 0;InitStack(&s);while (i < 5){PushStack(&s, PushArray[i]);while (TopStack(&s) == PopArray[index]){PopStack(&s);index++;}i++;}if (EmptyStack(&s))printf("出栈顺序正确!\n");elseprintf("出栈顺序不正确!\n");
}

栈的封装我就不往上放了,判断元素出入栈顺序合法性的思想就是这个。如有更好的思路,欢迎下方留言讨论。

栈应用---元素出栈、入栈顺序的合法性判断相关推荐

  1. 【C++】【数据结构】顺序栈的基本操作(初始化、入栈、出栈、取栈顶元素、遍历输出栈)的算法实现附全代码

    C++实现顺序栈的算法+步骤(附全代码): 使用c++完成数据结构顺序栈的基本操作,包括(初始化.入栈.出栈.取栈顶元素.遍历输出栈等),可直接编译运行. 顺序栈的定义如下: #define MAXS ...

  2. js进栈出栈_链栈及基本操作(包含入栈和出栈)详解

    链栈,即用链表实现栈存储结构. 链栈的实现思路同顺序栈类似,顺序栈是将数顺序表(数组)的一端作为栈底,另一端为栈顶:链栈也如此,通常我们将链表的头部作为栈顶,尾部作为栈底,如图 1 所示: 图 1 链 ...

  3. 复习栈和队列,详解最小栈,栈的弹出压入序列,逆波兰表达式求值

    栈和队列的概念 栈:吃进去吐出来 对列:吃进去拉出来 数据结构中的栈和内存中的区别 数据结构中的栈具有后进先出的特性,而内存中的栈是一个内存空间,只不过这个内存空间具与数据结构的栈具有相同的特性. 栈 ...

  4. PTA 栈 (20分)(全网首发)(实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1))

    题目描述: 我们知道平凡的栈有几个操作: push(value) 将 value 压入栈 pop() 将栈顶元素弹出, 并返回这个弹出的元素. 现在我们想要在平凡栈的基础上实现以下几个操作: push ...

  5. 栈--进栈,出栈指针修改的顺序问题

    策略 设计一个顺序栈,附设的top指针有两种策略: 指向当前栈顶元素 指向栈顶上方空位 借助一篇文章深入分析二者的异同. top指向栈顶 首先令top指向当前栈顶元素,这样进来一个新的元素时,新元素不 ...

  6. 数据结构:双栈共享的初始化、入栈、出栈

    算法设计: 将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别处于数组的两端.当第0号栈的栈顶指针top[0]等于-1时该栈为空,当第1号栈的栈顶指针top[1]等于m时该栈为空.两个栈均从 ...

  7. c语言中缀表达式求值_数据结构考研笔记之栈与队列(四)栈与队列应用括号匹配、中缀表达式转前缀后缀问题...

    文字:独木 排版:独木 图片:独木 栈与队列 1.括号匹配问题 栈 例题1 例题2-----不匹配例题1 例题3-----不匹配例题2 2. 表达式求值问题 例题 1.中缀表达式转前缀表达式 2.中缀 ...

  8. 元素出栈入栈顺序是否合法

    要实现栈的出栈.入栈当然少不了使用栈,故一定要记得引入其头文件,否则- 对于栈来说,它的入栈顺序和其出栈顺序密切相关,比其先入栈的元素肯定比其后出栈,因为一定的遵守"先进后出"原则 ...

  9. 元素入栈顺序确定,共有多少种出栈顺序?----Python

    文章目录 问题描述 对栈的理解 题目的思考 python代码 卡特兰数 扩展思路 问题描述 前几天看到一个题目,假设五个元素的入栈顺序为e1.e2.e3.e4.e5,那么共有多少种出栈顺序?一时之间思 ...

  10. 实现对顺序表的入栈出栈操作、利用栈将十进制转化成二进制输出【数据结构实验报告】

    文章目录 一.入栈.出栈操作 二.利用栈操作将十进制的数转化为二进制 一.入栈.出栈操作 #include<iostream> using namespace std; #define M ...

最新文章

  1. YOLOv3 训练的各种config文件以及weights文件。
  2. 动态指定超链接参数的几种方法(Passing a JavaScript variable into href of )
  3. 智源研究院加入“全球人工智能伦理与抗击新冠疫情联盟”
  4. mysql损坏表修复
  5. Kotlin 中的 run、let、with、apply、also、takeIf、takeUnless 语法糖使用和原理分析
  6. c语言游戏注入dll能干什么,教大家写一个远程线程的DLL注入,其实还是蛮简单的……………………...
  7. Python with上下文管理及自定义上下文管理
  8. java安卓模拟器和电脑通信_Android 模拟器(JAVA)与C++ socket 通讯 分享
  9. C#之ActionBlock异步关闭死锁
  10. No orientation specified, and the default is
  11. 永洪BI在 Linux/Unix 下 jdk 环境如何配置?
  12. 如何在自己的板子上实现android关机
  13. 阿里云的服务器居然泡在“水”里?| 数据中心参观有感
  14. 操作系统中的故障恢复控制台意义非凡
  15. 技术之道、思维的力量和人生观
  16. 面试题练习(Java基础(一))
  17. 【Linux高级驱动】网卡驱动分析
  18. 网站正式上线之前的ICP备案和公安联网备案
  19. 深入理解C++中的循环引用问题及解决方法
  20. 中国首台千万亿次超级计算机,中国首台千万亿次超级计算机完成安装

热门文章

  1. 减小编译bin文件大小_两个奇技淫巧,将 Docker 镜像体积减小 99%
  2. delphi调用python_Delphi使用Python来解码邮件
  3. JavaScript:三大家族
  4. 爬虫:Python爬虫学习笔记之爬虫基础
  5. mysql 周 获取日期_MySQL获取日期周、月、天,生成序号
  6. ExtremeC3Net: 使用高级C3模块的极轻量人像分割模型
  7. 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
  8. Linux基础-1.Linux命令及获取帮助
  9. opensuse安装Tomcat碰到的问题
  10. lufylegend库 鼠标事件 循环事件 键盘事件