元素出栈、入栈顺序的合法性(判断一个字符串是否按照出栈顺序)

假设入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1),判断出栈序列是否合法?

实现思路:

总的来说就是模拟元素的出入栈过程,并进行判断。

首先,判断出栈序列和入栈序列的元素个数是否相等,若不相等,则不合法;若相等,则继续进行判断。

其次,遍历入栈序列并依次对元素进行入栈,在入栈每个元素时,都判断是否与出栈序列的index位置元素相等,若相等,出栈该元素,index++;若不相等,则不合法;并且index要小于出栈元素个数,否则不合法。

代码实现:

  //元素出栈入栈顺序的合法性
  
  int StackOrder(StackType input[], StackType output[], int insize, int outsize)                                                     
  {
      assert(input);
      assert(output);
      if(insize != outsize)
          return 0;
       int i = 0;
       SeqStack s;
       InitSeqStack(&s);
       int out_index = 0;
      StackType top;
       for(; i < insize; i++)
       {   
           PushSeqStack(&s, input[i]);
           while(TopSeqStack(&s, &top))
           {   
               if(out_index >= outsize)
                   break;
               if(top == output[out_index])
               {
                   PopSeqStack(&s);
                   ++out_index;
               }
               else
               {
                   break;
               }
           }
       }
       if(out_index == outsize && TopSeqStack(&s, &top) == 0)
           return 1;
       return 0;
  }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值