栈的经典应用

1.栈在括号匹配中的应用

 

算法思路:

依次扫描所有字符,遇到左括号则入栈,遇到右括号则弹出栈顶元素检查是否匹配

匹配失败的情况:

(1)栈中仍有多余的左括号  

(2)栈中已经没有左括号与余下的右括号进行匹配

(3)左右括号不匹配

以顺序栈为例:

#define MAXSIZE 10
typedef struct {
	char data[MAXSIZE];
	int top;           //栈顶指针
}SqStack;             //定义一个顺序栈
 
void InitStack(SqStack& S) {    //顺序栈的初始化 
	S.top = -1;
}

bool IsEmpty(SqStack S) {      //顺序栈的判空
	if (S.top == -1)
		return true;
	return false;
}

bool Push(SqStack& S,char e) {         //入栈
	if (S.top == MAXSIZE - 1)     //栈满
		return false;
	S.data[++S.top] = e;
	return true;
}

bool Pop(SqStack& S, char& e) {      //出栈
	if (S.top == -1)               //空栈
		return false;
	e = S.data[S.top--];
	return true;
}

bool BracketCheck(char str[], int length ) {    //str为输入的括号字符串,length为字符串长度
	SqStack S;
	InitStack(S);      //初始化一个栈
	for (int i = 0; i < length; i++) {
		if (str[i] == '(' || str[i] == '[' || str[i] == '{') {
			Push(S, str[i]);           //将元素压入栈
		}
		else {
			if (IsEmpty(S))         //扫描到右括号,且当前栈为空
				return false;       //匹配失败
			char topelem;
			Pop(S, topelem);        //栈顶元素出栈
			if (topelem == '(' && str[i] == ')')       //如果匹配成功,则继续
				continue;
			else if (topelem == '[' && str[i] == ']')
				continue;
			else if (topelem == '{' && str[i] == '}')
				continue;
			else
				return false;                          //否则直接退出
		}
	}
	return IsEmpty(S);      //检索完全部括号后,若栈为空则说明匹配成功
}

2.表达式求值问题:

(1)表达式求值问题的介绍:

我们常用的算数表达式有三种:中缀表达式、后缀表达式(逆波兰表达式)、前缀表达式(波兰表达式)

算术表达式由三部分组成:操作数、运算符、界限符

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
飞思卡尔LIN协议是一种在汽车电子领域中广泛应用的通信协议。它定义了一套用于在车内网络中进行低成本、低数据率通信的标准,可实现不同电子控制单元之间的即时通信和数据交换。 飞思卡尔LIN协议具有以下几个主要应用: 1. 汽车电子网络控制:飞思卡尔LIN协议应用于车内网络控制系统,其中多个电子控制单元通过LIN总线进行通信,并实现对车内各种功能的控制,如车窗、中央锁定系统、座椅调节器等。 2. 车身电子控制:飞思卡尔LIN协议应用于车身电子控制系统,实现对车身各个电子设备的控制和监测,如车灯、转向灯、雨刷等。通过LIN协议应用,车身电子控制系统可以实现更高效、更可靠的通信和数据交换。 3. 仪表盘和控制面板:飞思卡尔LIN协议可用于连接仪表盘和控制面板上的各种电子设备,如仪表仪器、按钮、指示灯等。通过LIN协议应用,可以实现对仪表盘和控制面板上的信息的显示、监控和控制。 4. 故障诊断和维修:通过飞思卡尔LIN协议,车辆的故障诊断系统可以收集和传输各种车辆的故障信息,方便维修人员进行故障分析和修复。 总之,飞思卡尔LIN协议是在汽车电子领域中应用广泛的通信协议,可实现车内各个电子设备之间的通信和数据交换,提高汽车的功能性、可靠性和安全性,并方便故障诊断和维修。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值