用C++STL中的栈数据结构解一道简单的算法题,已经解出来了,但遇到一个奇怪的问题,请教一下大家?

发布于 2022-09-12 01:40:43 字数 1594 浏览 25 评论 0

题目介绍:
image.png
链接: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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

昔日梦未散 2022-09-19 01:40:43

在一次进循环的时候 S 还是空的,S.top() 直接就挂掉了。

温柔戏命师 2022-09-19 01:40:43

建议你先自己调试一下,调试过程可以看到各种变量的内存地址,当前内容,线程的运行情况等。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文