每天一道算法题(11)——栈的push、pop 序列
2015-06-04 11:01
204 查看
题目:输入两个整数序列。其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序。为了简单起见,我们假设push 序列的任意两个整数都是不相等的。
例如:输入的push 序列是1、2、3、4、5,那么4、5、3、2、1 就有可能是一个pop 系列
(2)倘若不满足(1),则压栈输入指针元素,直到输入指针元素等于输出指针元素或者输出指针已经指向空。是前者情况,则分别省略压栈出栈操作,直接后移输入输出指针,若为后者,则返回false,因为此时栈顶不满足,所有输入序列已经压栈。
例如:输入的push 序列是1、2、3、4、5,那么4、5、3、2、1 就有可能是一个pop 系列
1.思路
(1)假设栈顶元素等于输出指针指向元素,弹出栈顶元素并后移输出指针;(2)倘若不满足(1),则压栈输入指针元素,直到输入指针元素等于输出指针元素或者输出指针已经指向空。是前者情况,则分别省略压栈出栈操作,直接后移输入输出指针,若为后者,则返回false,因为此时栈顶不满足,所有输入序列已经压栈。
2.代码
bool decision(const char* in, const char* out){ if(!in||!out) return false; stack<char> s; s.push(*in++); while(!s.empty()){ if(s.top()==*out){ s.pop(); out++; } else{ //压栈,直到此时*in=*out或者in已经输入完毕 while(in!='\0'&&*in!=*out) s.push(*in++); if(*in=='\0')//栈顶元素不满足且in已无输入 return false; else{//*in==*out情况 in++; out++; } } } return true; }
相关文章推荐
- 每天一道算法题(11)——栈的push、pop 序列
- linux c++动态链接库so编写
- Nginx安装与使用
- 百万级PHP网站架构工具箱
- 一步步学习Linux多任务编程
- centos桌面使用
- OpenCV,详解基本图像容器Mat类与IplImage结构体(三)
- 用PowerShell处理复杂Json数据
- nopcommerce中文网
- live555 分析—— OpenRtsp
- Eclipse EE 发布项目导致 Tomcate 的配置文件 server.xml 还原
- centos6.6编译安装nginx-1.8.0
- 自动化运维平台puppet的高级应用
- CentOS 6.5 图文安装教程
- 安装CentOS 7 出错BootLoaderError
- 学习笔记:架构 移动应用架构 开篇(一)
- centos下 安装jdk
- 修改属性页CPropertyPage标题
- Linux多线程同步的几种方式
- linux驱动之模块化编程