题解 | #【模板】栈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;
   }

}
全部评论

相关推荐

测试糕手手:社会第一课,随便吹牛逼,直接说四个月,别老实。老实人只会被欺负
点赞 评论 收藏
分享
Ncsbbss:又想干活又想要工资,怎么什么好事都让你占了
点赞 评论 收藏
分享
05-19 15:21
已编辑
华南农业大学 Java
白火同学:你才沟通了200,说实话,北上广深杭这里面你连一座城市的互联网公司都没投满呢,更别说还有各种准一线二线城市了。等你沟通突破了三位数,还没结果再考虑转行的事吧。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务