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

假设入栈的序列(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;
  }

猜你喜欢

转载自blog.csdn.net/weixin_40417029/article/details/79887688