给定入栈顺序,判断出栈顺序是否合法
来源:互联网 发布:近在咫尺柳情和方知 编辑:程序博客网 时间:2024/05/16 18:11
#include<iostream>using namespace std;#include<stack>#include<cassert>template<class T>bool testLegal(int *stack_in, int *stack_out,size_t n){assert(stack_in&&stack_out);stack<T> s;int j = 0;//出栈数组下标for (size_t i = 0; i < n; i++){s.push(stack_in[i]);while (!s.empty()&&s.top()==stack_out[j]){s.pop();++j;}}return (s.size() == 0) ? true : false;}void test1(){int in[5] = { 1, 2, 3, 4, 5 };int out[5] = { 4, 5, 3, 2, 1 };cout << testLegal<int>(in, out, 5) << endl;}
题目描述:给定一个入栈序列,给定一个出栈序列,判断该出栈序列是否合法。
分析:假如入栈序列为1 2 3 4 5,判断4 5 3 2 1 是否是合法的出栈顺序。
两个序列均以数组的形式给出
从两个数组的第一个元素开始,如果栈为空,或者,栈顶元素不等于当前出栈数组当前下标对应的元素时,将当前入栈数组中下标所指向的元素进行压栈
初始状态如下:
步骤1:把 1 进行压栈,并将下标后移,如下图所示,
步骤2:依次进行判断并压栈,当4进栈后,此时栈顶元素等于出栈数组下标所指向的元素,将4出栈,如下图所示
步骤3:将 4 出栈,并将出栈数组的下标后移,继续判断栈顶元素是否为当前出栈数组下标对应的元素,是,则出栈,否则继续往后执行
步骤4:重复上述步骤,直到入栈数组中的下标走到尽头
当最后一个元素入栈后,此时只需循环判断栈顶元素是否与出栈数组当前下标对应的元素相等,如果该序列合法,则栈中的元素最终都会出栈,不合法则栈永远不为空
此时,栈为空,则该序列合法。
阅读全文
1 0
- 给定入栈顺序,判断出栈顺序是否合法
- 给定入栈顺序,判断出栈顺序是否合法
- 根据入栈顺序判断出栈顺序是否合法
- 判断出栈顺序是否合法
- 给定一个入栈顺序和一个出栈顺序,判断出栈顺序是否可能
- 给定入栈序列判断给定出栈序列是否合法
- 栈-判断某个出栈顺序是否合法
- 判断某个出栈顺序是否合法
- 判断元素出栈顺序是否合法
- 给定入栈序列,判断出栈序列是否合法
- 给定入栈顺序,求解出栈顺序
- 给定入栈序列判断给定出栈序列是否合法(Exercise1_3_45,java)
- 给定入栈顺序求所有出栈可能性
- 判断出栈顺序是否满足入栈顺序
- 根据入栈判断出栈是否合法
- 算法学习----给定入栈的顺序,判断另一个顺序是否为该入栈顺序的一个弹出顺序
- 给定入栈序列,判定出栈序列是否合法
- 判断入栈顺序
- POJ3669 Meteor Shower 流星雨【预处理】【广搜】
- Python学习之条件循环语句详解
- 指针总结
- 子集生成算法
- 【算法系列】—冒泡排序
- 给定入栈顺序,判断出栈顺序是否合法
- MVC模型和MVT模型
- 详解协方差与协方差矩阵
- 【Angular】——tab页
- Java练习题8
- 魔方格答案纠错-概率论
- Linux硬链接和软链接
- 数据结构:用Java对数组进行排序
- 关于unicode与utf-8的认识