题解 | #【模板】栈2#
- pushV数组内的值为待入栈值,popV数组为出栈值
如:入栈顺序pushV:54321 出栈popV:53214 - 建立一个数组做铺助栈,依次比较pushV数组与popV数组的值
- 一旦该 pushV[i] 与 popV[j] 值不同,将该 pushV[i] 值压入铺助栈中。
- 若 pushV[i] 与 popV[j] 值相同,该pushV数组值不压入铺助栈,并将铺助栈栈顶值与popV数组下一个值比较,若相等,则该铺助栈栈顶值弹出;不等,则回到pushV数组继续比较。
/* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
- @param pushV int整型一维数组
- @param pushVLen int pushV数组长度
- @param popV int整型一维数组
- @param popVLen int popV数组长度
- @return bool布尔型
- C语言声明定义全局变量请加上static,防止重复定义*/
#include<stdbool.h>//bool类型头文件
bool IsPopOrder(int* pushV, int pushVLen, int* popV, int popVLen ) {
int pzz[1000];//铺助栈
int k = 0;//压入铺助栈的数据个数
if (pushVLen != popVLen) {//入栈数据个数与出栈数据个数必须相同
return false;
}
for (int i = 0, j = 0; i < pushVLen;) {//pushV数组的元素在铺助栈入栈出栈,直到pushV数组内全部的数据元素已入栈出栈,退出循环
if (pushV[i] != popV[j]) {//当pushV数组popV数组值不同
pzz[k] = pushV[i];//该pushV值入栈
k++;
i++;
} else {//当pushV数组popV数组值相同
i++;j++;
while (k>0 && pzz[k-1] == popV[j]) {//铺助栈栈顶值与popV数组下个值进行比较,相等,则
k--;//铺助栈栈顶值弹出
j++;//popV数组下个值
}
}
}
if (k == 0) {//铺助栈为空,说明pushV数组入栈与popV数组出栈顺序符合
return true;
} else {
return false;
}
}