c++实现对出栈合法性的检测

来源:互联网 发布:ticwatch软件下载 编辑:程序博客网 时间:2024/04/29 22:52
//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;}
0 0
原创粉丝点击