栈的输入和输出判断

栈是数据结构里最常用的一种,有时候给一个有序的输入要判断一种顺序是否符合栈的输出. 
例如:输入为:1 2 3 4 5 6 来判断怎样的输出是符合栈的特点的输出 
输出为 : 1 2 3 4 5 6 是符合的 因为可以1入1出 2 入2出 ……最后6入6出。 
输出为:6 5 4 3 2 1也是可以的 因为可以1 2 3 4 5 6都入栈然后在一一出栈 
输出为:5 6 2 3 4 1 是违法的 因为无论怎么进行压栈和出栈是得不到这个结果的 栈的输入是从小到大的 所以当输出6时除了5已经输出外 其他的(1234)都是在栈中的 而且因为他们的入栈是按序的 所以出栈也是按序的(顺序正好相反) 所以总结出一个判断规则 :比当前数小的且在当前数之后进行输出的他们的输出顺序都是逆序的.例如刚才的输出6之后的2341应该为逆序的 为4321。 
下面来写个程序来模拟栈的输出 
例: 
输入: 

6 5 4 3 2 1 
输出:YES 
输入: 

7 6 4 5 3 2 1 
输出:NO 
第一个输入为输入的个数 ,第二个输入为输入序列

<code class="hljs cpp has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#include <stdio.h></span>
<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#include <stdlib.h></span>
<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#define MAXSIZE 50</span>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> main()
{
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> n;
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">stack</span>[MAXSIZE];
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> target[MAXSIZE];
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> top=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">bool</span> ok=<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>;
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">while</span>(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">scanf</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"%d"</span>,&n)==<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>)
    {
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> i=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>,A=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>,B=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>;<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//A按序输入的数(总是从1增长到n ) 而B则是当前检测输入的下标</span>
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span>(i=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>;i<=n;i++)
            <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">scanf</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"%d"</span>,target+i);
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">while</span>(B<=n)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//检测目标数</span>
        {
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(A==target[B]){A++;B++;}<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//检测按序输入的数和目标数是否相等</span>
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(top&&<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">stack</span>[top]==target[B]){top--;B++;}<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//如果栈不为空则检测 检测栈顶的数是否和目标的数相等 相等则退栈</span>
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(A<=n)<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">stack</span>[++top]=A++;<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//如果按序输入的数和当前的目标数不相等则压栈</span>
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {ok=<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">break</span>;}
        }
        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">printf</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"%s\n"</span>,ok?<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"YES"</span>:<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"NO"</span>);
    }
}</code>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hebastast

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值