用C++STL中的栈数据结构解一道简单的算法题,已经解出来了,但遇到一个奇怪的问题,请教一下大家?
题目介绍:
链接:http://dengdengoj.cc/problem....
我的解题思路:
将目标序列存储到target数组,依次扫描target数组:
1.若和栈顶元素相同,则出栈,target扫描指针加1;
2.若和栈顶元素不相同,则入栈,入栈指针加1(入栈有序)
3.其它情况说明不匹配
我的ac代码:
#include<cstdio>
#include<cstdlib>
#include<stack>
using namespace std;
int target[120];
int main(){
int n;
while(scanf("%d",&n)!=EOF&&n<=100){
for(int i=1;i<=n;i++) scanf("%d",&target[i]);//读取目标输出序列
int A=1,B=1;//B代表准备进栈值(也即进栈指针),A是当前target元素的下标,是target[]数组的扫描指针
stack<int> S;
int ok=1;
while(A<=n){
// !!@ 注意下面此处是我的问题所在
if(B<=n){//目标值和栈顶元素不一样,将元素进栈
S.push(B);
B++;
}
else if(!S.empty()&&target[A]==S.top()){
S.pop();
A++;
}
else{
ok=0;
break;
}
}
if(ok==1) printf("Yes\n");
else printf("No\n");
}
return 0;
}
上面代码是可以通过的;
但是,若把标记处'!!@' if的判断语句修改为(这样是我一开始的写法):
if(target[A]!=S.top()&&B<=n){...}
即增加了target[A]!=S.top()条件,程序就会卡在这里,即不退出,也不向下执行,debug的时候也是这样
加了此条件我的本意是:当目标元素和栈顶元素不同&&输入数据还未结束时,入栈新元素
我的猜测这样写出现问题可能原因是:就是一开始栈空的时候,这时候做比较但栈中没有元素,所以程序死在这里吗?还是说是其它原因?因为也可能栈没有元素,但做比较还是不相等(系统会初始化?),这样还是符合该条件判断,正常来说不会死在这里不出去。
大家觉得是什么原因呢?求指点~
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在一次进循环的时候
S
还是空的,S.top()
直接就挂掉了。建议你先自己调试一下,调试过程可以看到各种变量的内存地址,当前内容,线程的运行情况等。