美文网首页
判断出栈结果是否正确

判断出栈结果是否正确

作者: Jonddy | 来源:发表于2018-02-11 00:35 被阅读0次

问题描述:对于进栈为顺序为1、2、3、4、5、6 ··· ,下列哪些不可能是栈的弹出顺序?

例如:

判断出栈结果的合法性

解题思路:利用栈和队列模拟入栈、出栈顺序即可解决此问题

1、将待处理的出栈结果存入order队列中
2、按元素顺序,将元素push进栈
3、每push一个元素,检查是否与队列首元素相同,若相同则弹出队列首元素,弹出栈顶元素,知道两个元素 不同
4、若最重栈为空,说明序列合法,否则不合法

入栈元素为1、2、3、4、5,序列为3、2、5、4、1,判断其合法性:

元素 1 入栈并判断
元素 2 入栈并判断、元素 3 入栈并弹出
元素 4 入栈并判断

代码:

n = order.size() + 1
    for x in range(1, n):  
        self.stack.push(x)
        while self.stack.empty != None and order.front() == self.stack.top:
            self.stack.pop()
            self.order.pop()

    if self.stack.empty():
        return False
    else:
        return True

算法复杂度分析:

  • 算法的复杂度为O(n)!!!不是O(n^2)!!!因为所有的元素只入栈出栈一次!

相关文章

  • 判断出栈结果是否正确

    问题描述:对于进栈为顺序为1、2、3、4、5、6 ··· ,下列哪些不可能是栈的弹出顺序? 例如: 判断出栈结果...

  • 校验出栈顺序

    给定入栈顺序,给出一组出栈顺序,判断是否满足条件

  • 用两个栈实现队列

    入队:将元素进栈A 出队:判断栈B是否为空,如果为空,则将栈A中所有元素pop,并push进栈B,栈B出栈; 如果...

  • 判断一个出栈序列是否正确

    栈 栈是一个很常见的数据结构, 他的特点就是先进后出 思路 解题思路是我们初始化一个栈, 将入栈序列一次循环入栈,...

  • 第二章 C++ STL 泛型编程 之stack&queue

    stack堆栈容器 堆栈只提供入栈push()、出栈pop()、栈顶元素访问top() 和判断是否为空empty(...

  • 判断出栈序列是否合法

    题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字...

  • 栈-N946-验证栈序列

    题目 概述:给定一个入栈序列和出栈序列,判断如果以入栈序列的顺序入栈,所给定的出栈序列的顺序是否是合理的 输入:入...

  • 8.30 leetcode刷题(1)

    栈和队列:20 有效的括号 思路:利用栈去做匹配,定义好哪种情况入栈,哪种情况出栈。最后还要判断一下栈是否为空 b...

  • 004 go语言实现栈

    1 数据结构 数据结构: 要实现的功能:0 栈的初始化1 获取栈长度2 入栈3 出栈4 清空栈内容5 判断栈是否为...

  • 使用栈实现队列

    思路: 思路比较简单,使用两个栈,一个栈A负责入队,一个栈B负责出队,出队的时候,先判断栈B的元素是否为空,如果为...

网友评论

      本文标题:判断出栈结果是否正确

      本文链接:https://www.haomeiwen.com/subject/rhwhtftx.html