3.3栈的应用举例

3.3栈的应用举例

Q1:设计一个算法判断合法的I(进栈)/O(出栈序列)
//Q1
for(i = 0;i < n;i++) { //遍历str的所有字符
	if(str[i] == 'I') //为'I'时进栈
		Push(st,str[i]);
	else if(str[i] == 'O') //为'O'时出栈
		if(!Pop(st,x)) {//若栈下溢出,则返回0
			DestrpyStack(st);
			return 0;
		}
}
if(StackEmpty(st)) {DestroyStack(st); return 1;}//栈为空时返回1,否则返回0
else {DestroyStack(st);return 0;}
Q2:判断回文串
//
int Palindrome(char str[],int n) {
	SqStack st; //定义一个顺序栈
	InitStack(st); //栈初始化
	int i;
	char ch;
	for(i = 0;i < n;i++) //所有字符依次进栈
		Push(st,str[i]);
	i = 0;//从头开始遍历str
	while(!StackEmpty(st)) {//栈不空循环
		Pop(st,ch);//出栈元素ch
		if(ch != str[i++])//两字符不同时返回0
			return 0;
	}
	return 1;//所有相应字符都相同时返回1
}
Q3:括号匹配
//
#include"SqStack.cpp"
int Match(char exp[],int n) {
	SqStack st;
	InitStack(st);
	int flag = 1,i = 0;
	char ch;
	while(i < n && flag == 1) {
		switch(exp[i]) {
			case '(':case '[':case '{':
				Push(st,exp[i]);break;
			case ')':
				if(!Pop(st,ch) || ch != '(')
					flag = 0;
				break;
			case ']':
				if(!Pop(st,ch) || ch != '[')
					flag = 0;
				break;
			case '}':
				if(!Pop(st,ch) || ch != '{')
					flag = 0;
				break;
		}
		i++;
	}
}
//
#include"SqStack.cpp"//包含前面的顺序栈基本运算函数
int Match(char exp[],int n) {//exp存放表达式
	SqStack st;//定义一个顺序栈st
	InitStack(st);//栈初始化
	int flag = 1,i = 0;
	char ch;
	while(i < n && flag == 1) {//遍历表达式exp
		switch(exp[i]) {
			case '(':case '[':case '{'://各种左括号进栈
				Push(st,exp[i]);break;
			case ')'://判断栈顶是否为'('
				if(!Pop(st,ch) || ch != '(')//出栈操作失败或不匹配
					flag = 0;
				break;
			case ']'://判断栈顶是否为'['
				if(!Pop(st,ch) || ch != '[')//出栈操作失败或不匹配
					flag = 0;
				break;
			case '}'://判断栈顶是否为'{'
				if(!Pop(st,ch) || ch != '{')//出栈操作失败或不匹配
					flag = 0;
				break;
		}
		i++;
	}
	if(StackEmpty(st) && flag == 1) //栈空且符号匹配则返回1
		return 1;
	else return 0;//否则返回0
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

噶米困了

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

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

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

打赏作者

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

抵扣说明:

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

余额充值