判断栈的合法性(21.6.7)

题目描述:

假设用I来表示入栈,O来表示出栈,栈的初态和终态都是空,用I和O的不同组合来代表不同的操作序列。请设计一个算法判断给出的操作序列是否合法,如果合法就返回true,否则返回false。

算法思想:

逐一扫描给出的入栈和出栈的序列,每扫描到任意个位置均需要检查出栈的次数(即‘O’的个数),判断是否小于等于入栈的次数(即‘I’的次数),若大于就是非法的序列,扫描结束之后,再判断入栈和出栈的次数是否相等,如果不相等,则说明错误,返回fasle。

代码如下:

int Judge(char A[]){
	int i=j=k=0;  //i为下标,j和k分别为字母I和O的个数 
	while(A[i]!='\0'){  //未到字符数组的最后 
		switch(A[i]){
			case 'I':j++; break;  //入栈次数增加一 
			case 'O':k++;
			if(k>j) {
				printf("序列非法!\n");
				exit(0);
			}
		}
		i++;
	}
	if(j!=k){
		printf("序列非法!\n");
		return false;
	}
	else{
		printf("序列合法!\n");
		return true;
	}
} 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值