验证进栈出栈的合法性
来源:互联网 发布:万合星多屏软件破解版 编辑:程序博客网 时间:2024/05/16 17:45
题目:
给两个序列,可以用数组来存储,一个数组存放进栈的顺序,一个数组存储出栈的顺序,要求检查这两个序列是否符合进栈和出栈匹配
方法:
(1)用一个辅助栈,将入栈序列的第一个元素压栈,看是否和出栈序列的第一个元素相等
(2)相等则将辅助栈中的元素弹出,继续比较入栈序列的下一个元素和出栈序列的下一个元素是否相等,
(3)若不想等则将继续将下一个入栈序列的元素压栈并且判断它是否与出栈序列的当前元素
若入栈元素遍历完,而辅助栈为空,则说明入栈序列中的元素和出栈序列中的元素匹配,返回true
若辅助栈不为空,则说明不匹配,返回false
程序:
//验证进栈出栈的合法性template<class T>bool CheckStack(const T *sPush,const T *sPop, size_t sizein,size_t sizeout){assert(sPush && sPop);assert(sizein && sizeout);if (sizein != sizeout)return false;stack<T> s;int i = 0;int j = 0;for ( i = 0; i < sizein; i++){s.push(sPush[i]);while (j<sizeout){if (!s.empty() && s.top() == sPop[j]){s.pop();j++;}else{break;}}}if (!s.empty()){return false;}elsereturn true;}
测试代码:
void TestCheckStack(){int a[] = { 1, 2, 3, 4, 5 };int b[] = {1,2,3,4,5};size_t sizein = sizeof(a) / sizeof(a[0]);size_t sizeout = sizeof(a) / sizeof(a[0]);cout << CheckStack(a, b, sizein,sizeout) << endl;}
0 0
- 验证进栈出栈的合法性
- 验证URL的合法性
- 验证姓名的合法性
- 验证居民身份证的合法性
- 验证身份证号的合法性
- 验证身份证的合法性
- 验证手机号的合法性
- 对身份证号码合法性的验证
- ios 验证邮箱的合法性
- JavaScript验证邮箱的合法性
- 验证登陆信息的合法性
- JS验证身份证的合法性
- 验证登陆信息的合法性
- 验证登陆信息的合法性
- 验证登录信息的合法性
- 验证登陆信息的合法性
- javascript验证给定的日期的合法性
- JS的 验证组织机构的合法性
- sklearn.preprocessing.PolynomialFeatures类的使用
- 2015年简短总结
- 分治法求最接近点对问题
- Java网络详解
- leetcode 59. Spiral Matrix II
- 验证进栈出栈的合法性
- 让vscode完美支持go vendor的代码跳转(使用vscode必看)
- scrapy 环境搭建
- ORB_SLAM之双目
- easyui,datagrid表格显示的字段内容随机
- socket编程(一)使用SOCK_STREAM建立可靠通信
- Facebook:AsyncDisplayKit
- hdu5665
- linux中pip的安装时ZipImportError