验证进栈出栈的合法性

来源:互联网 发布:万合星多屏软件破解版 编辑:程序博客网 时间: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
原创粉丝点击