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

来源:互联网 发布:阿里技术大牛 知乎 编辑:程序博客网 时间:2024/06/07 02:18

【思路】

给出入栈顺序,判断出栈顺序的合法性。

大致算法如下:


以入栈顺序 1 2 3 4 5,出栈顺序2 1 3 5 4 为例

1.先判断p1 p2不相等,1入栈,p1++然后p1和p2相等,p1++,p2++;

2.判断栈顶元素1和p2相等,则出栈且p2++;

3.p1的值和p2相等,都为三,则p1++,p2++;

4.s为空,p2->5和p1->4不相等,则4入栈,p1++;

5.此时p1->5,p2->5,s->4,p1==p2,则p2++到4,p1到头,则将s栈里的元素拿出与p2比较,相等,出栈。

6.p2到了结尾,p1也到了结尾,s栈为空,则这个序列是正确的。

【代码如下】

bool Judge(int *p1,int *p2,int len1,int len2){if ( (!p1)||(!p2)||(len1 != len2)) //如果p1 p2长度不同或者为空,直接返回{return false;}stack<int> s;int i = 0;//p1int j = 0;//p2while (j < len2){if (!s.empty() && s.top() == p2[j])  //s不为空,且s栈顶与p2相等 {s.pop();    //s出栈,p2++j++;}else  //s为空或者s不为空但是栈顶和p2不等时,都要比较p1和p2的值{if (p1[i] == p2[j])  //如果相等{++i;++j;}else  //如果不等{s.push(p1[i]);++i;}if (i > len1)  //防止p1越界,但是有不能让它到了尽头就退出,应该过了最后一个再退出break;}}if (s.empty())return true;return false;}