判断元素出栈入栈顺序的合法性

来源:互联网 发布:rfid读写器java源代码 编辑:程序博客网 时间:2024/06/06 07:16

     思路:假设入栈序列{1,2,3,4,5},出栈序列{4,5,3,2,1};首先我们将入栈序列的第一个元素入栈,这是设置一个指针只想出栈序列的第一个元素,如果出入栈以后,栈顶

元素和出栈指针所指向的元素相等,那么就让栈顶元素出栈,让指针++,最后判断栈为空就好,若为空,就说明是合法的,如果不是就是不合法。

     代码如下:

#include<iostream>#include<assert.h>#include<stack>using namespace std;
bool IsLegal(int* stackin,int* stackout,int lenin,int lenout){assert(stackin&&stackout);//判断入栈、出栈序列不为空if(lenin!=lenout)//入栈长度不等于出栈长度,不合法{return false;}stack<int> l1;int i=0;int j=0;for(;i<lenin;++i){l1.push(stackin[i]);//将元素一一入栈while(l1.size()>0&&l1.top()==stackout[j])//保证栈里的元素不为空,并且每次栈顶均要和出栈序列一一匹配{l1.pop();++j;}}if(l1.size()==0)return true;elsereturn false;}void TestStack(){int stackin[]={1,2,3,4,5};//int stackout[]={4,5,3,2,1};int stackout[]={1,5,3,2,4};int lenin=sizeof(stackin);int lenout=sizeof(stackout);int A=IsLegal(stackin,stackout,lenin,lenout);if(A){cout<<"出栈顺序合法"<<endl;}else{cout<<"出战顺序不合法"<<endl;}}int main(){TestStack();return 0;}


阅读全文
0 0
原创粉丝点击