小白算法积累——栈1#判断合法操作序列

题目:I:入栈,O:出栈。写出一个算法,判定所给的操作序列是否合法。合法要求:栈的初态和终态均为空。若合法,返回true,否则返回false(假定被判定的操作序列已存入一维数组中)
关键字:判断入栈出栈操作序列是否合法

思路
入栈:无论多少次,只要内存足够,就可以进行
#限制:内存足够
出栈:必须保证栈非空才能进行出栈操作
#限制:栈非空,即每时每刻,出栈的总次数都应小于等于入栈的总次数
终态为空:入栈总次数=出栈总次数

1)依次逐一扫描入栈出栈序列(即由“I”和“O”),
每扫描至任一位置均需检查出栈次数(即“O”的个数)是否小于等于入栈次数(即“I”的个数)
若大于,则为非法序列。
需要变量:字符数组A[i],I的计数:j,O的计数:k

2)扫描结束后,再判断总的入栈次数和出栈次数是否相等
若不相等,则为非法序列。
需要变量:

int Judge(char A[]){//判断字符数组A中的输入输出序列是否是合法序列。如是,返回true,否则返回false
   int i=0;
   int j=k=0;
   while(A[i]!='0'){
     switch (A[i]){
      case'I':j++;break;
      case'O':k++;break;
         if(k>j){
         printf("序列非法\n");exit(0);}
         }
         i++;
   }
   if(j!=k){
      printf("非法序列\n");
      return false;
   }
   else{
      printf("序列合法\n");
      return true;
      }
}
   
  
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值