//Designed by st
//检查出栈的合法性
#include <iostream>
#include <assert.h>
#include <stack>
using namespace std;
bool _isLegal(int* _pushStack, int* _popStack, int len)
{
if (_pushStack == NULL || _popStack == NULL || len <= 0)
{
exit(EXIT_FAILURE);
}
bool ret = false;
stack<int> s;//辅助栈
if (_pushStack != NULL && _popStack != NULL && len > 0)
{
int* _inPtr = _pushStack;
int* _outPtr = _popStack;
while (_outPtr - _popStack < len)//遍历整个出栈序列
{
while (s.empty() || s.top() != *_outPtr)//遍历入栈序列,
{
if (_inPtr - _outPtr == len)
{
break;
}
s.push(*_inPtr);
_inPtr++;
}
if (s.top() != *_outPtr)
{
break;
}
s.pop();//当*_inPtr == *_outPtr 时表示此时执行的是出栈操作,所以讲辅助栈的栈顶元素pop出去
_outPtr++;
}
if (s.empty() && _outPtr - _popStack == len)//保证出栈的指针已经全部都遍历了一遍
{
ret = true;
}
}
return ret;
}
int main()
{
int _pushStack[] = { 1, 2, 3, 4, 5 };
int _popStack[] = { 3,2,1,4,5 };
int len = sizeof(_pushStack )/ sizeof(_pushStack[0]);
bool ret = _isLegal(_pushStack, _popStack, len);
cout << ret << endl;
getchar();
return 0;
}
c++实现对出栈合法性的检测
最新推荐文章于 2024-06-07 15:51:57 发布