栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

栈在括号匹配中的应用---算法思想和代码(C语言)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

栈在括号匹配中的应用---算法思想和代码(C语言)

栈在括号匹配中的应用算法思想和代码(C语言) 一、算法思想

1-先设置一个空栈,用来存放暂未匹配的括号;
2-报错:
a.空栈时,数组当前数据为右括号;
b.栈非空,栈顶指针指向的数据与数组当前数据不匹配;
c.算法结束时,栈应为空,否则括号序列不匹配;
3-若数组当前数据为左括号,将数据压入栈内;

二、使用步骤 1.栈的基本操作

代码如下:

#include
#include
#include
#define MaxSize 50

//定义一个顺序栈
typedef struct {
	//顺序栈需定义存放数据的数组以及栈顶指针
	char data[MaxSize];	
	int top;
}SqStack;

//初始化栈
void InitStack(SqStack &S) {
	S.top = -1;
}

//判栈空
bool Empty(SqStack S) {
	return S.top == -1;
}

//入栈
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 GetTop(SqStack S, char& e) {
	if (S.top == -1)
		return false;
	e = S.data[S.top];
	return true;
}
2.括号匹配

代码如下:

//括号匹配问题
bool BracketCheck(char str[], int 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 (Empty(S))
				return false;
			//若栈不为空,则分三种情况
			char EmleTop;
			Pop(S, EmleTop);
			if ((str[i] == '}' && EmleTop != '{') || (str[i] == ']' && EmleTop != '[') || (str[i] == ')' && EmleTop != '('))
				return false;
		}
	}
	return Empty(S);

}

//main函数
int main() {
	//静态分配数组
	char array[10] = { '{','[','(',')','[',']',']','}','[',']'};
	int length = 10;
	for (int i = 0;i <= length;i++) {
		printf("%c",array[i]);
		printf("");
	}
	printf("n");
	if (BracketCheck(array, length))
		printf("匹配成功n");
	else
		printf("匹配失败n");
	return 0;
}

三、思考

如何用动态分配数组编写此算法?

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/997060.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号