您的位置:首页 > 其它

验证进栈出栈的合法性

2016-04-16 23:36 309 查看
题目:

给两个序列,可以用数组来存储,一个数组存放进栈的顺序,一个数组存储出栈的顺序,要求检查这两个序列是否符合进栈和出栈匹配

方法:

(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;
}
else
return 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: