栈的压入、弹出序列
来源:互联网 发布:网络节点度 编辑:程序博客网 时间:2024/05/21 17:02
面试题22:栈的压入、弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。
分析:
考研的数据结构中也常有这种题目,解题的基本思路是:如果要得到第二序列中的第一元素需要将那么些元素入栈,然后出栈得到第一个元素,然后判断第二元素是不是在栈顶若不是继续入栈直到序列为空或者得到该元素。文字表达比较绕,画图表示:
假设入栈序列为:1.2.3.4.5需要得到的出栈序列为:4.3.5.1.2
为了得到4那么需要将1.2.3.4入栈,然后4出栈。得到4,然后第二个出栈序列的元素为3,正好位于栈顶,于是出栈,下一个出栈元素为5,于是5入栈、出栈。得到5,下一个是1,此时栈顶元素是2且出栈序列为空,此时结束表示出栈序列不是该栈的弹出顺序。
pPush为入栈序列,pPop为出栈序列,nLength为栈的深度
bool IsPopOrder(const int* pPush,const int* pPop,int nLength){bool bPossible = false;if(pPush != NULL && pPop != NULL && nLength>0){const int* pNextPush = pPush();const int* pNextPop = pPop();std::stack<int>stackData;while(pNextPop - pPop < nLength){while(stackData.empty() || stackData.top() != *pNextPop){if(pNextPush - pPush == nLength){break;}//入栈序列全部遍历stackData.push(*pNextPush);pNextPush ++ ;}if(stackData.top() != *pNextPop){break;}stackData.pop();pNextPop++;}if(stackData.empty() && pNextPop - pPop == nLength){bPossible = true;}//出栈序列全部遍历}return bPossible;}
0 0
- 1366栈的压入弹出序列
- 栈的压入、弹出序列
- 栈的压入、弹出序列
- 栈的压入、弹出序列
- Q22:栈的压入、弹出序列
- 栈的压入弹出序列
- 栈的压入、弹出序列
- 栈的压入弹出序列
- 栈的压入、弹出序列
- 栈的压入弹出序列
- 栈的压入、弹出序列
- 栈的压入、弹出序列
- 栈的压入弹出序列
- 栈的压入、弹出序列
- 栈的压入和弹出序列
- 栈的压入、弹出序列
- 栈的压入、弹出序列
- 栈的压入、弹出序列
- 关于Android 适配器adapter.notifyDataSetChanged()不起作用的原因
- 闲时整理(2)------FloatActionButton
- 微软正式提供Visual Studio 2013正式版下载(附直接链接汇总)
- CSS HACK收集:在IE6下hack的方法详解
- 嵌入式系统之低功耗设计
- 栈的压入、弹出序列
- sqlserver bcp导出数据问题
- 安卓逆向学习笔记(1) - 反编译classes.dex获取apk的java源代码
- LTE参数RSRP、RSSI、RSRQ、RS-CINR
- 【C#】[C++] C# 与 C++ 之间的类型转换
- 用Quick3.3简单开发微信打飞机01
- Linked List Circle题解
- [Android学习笔记]自定义控件的使用
- Android开发积累_2)权限、Intent