实现括号匹配算法(括号匹配的检验算法完整程序)

您所在的位置:网站首页 为什么境外输入病例那么多外国机场不检查吗 实现括号匹配算法(括号匹配的检验算法完整程序)

实现括号匹配算法(括号匹配的检验算法完整程序)

2024-05-21 03:42| 来源: 网络整理| 查看: 265

大家好,又见面了,我是你们的朋友全栈君。

实现括号匹配算法(顺序表)

括号匹配问题 假设一个算术表达式中包含圆括号、方括号和花括号三种类型的括号,编写一个函数,用来判别表达式中的括号是否正确配对,并设计一个测试主函数。

【算法思想】 在算术表达式中,右括号和左括号匹配的次序正好符合后到的括号要最先被匹配的“后进先出”堆栈操作特点,因此可以借助一个堆栈来进行判断。 括号匹配共有以下4种情况:

左、右括号配对次序不正确;右括号多于左括号;左括号多于右括号:左、右括号匹配正确。

具体方法如下:顺序扫描算术表达式(表现为一个字符串),当遇到3种类型括号的左括号时,让该括号进栈。当扫描到某一种类型的右括号时,比较当前栈顶括号是否与之匹配,若匹配,则退栈继续进行判断:若当前栈顶括号与当前扫描的括号不相同,则左、右括号配对次序不正确;若字符串当前为某种类型右括号而堆栈已空,则右括号多于左括号:字符串循环扫描结束时,若堆枝非空(即堆枝中尚有某种类型左括号),则说明左括号多于右括号;如果未出现 上述3种情况,则说明左、右括号匹配正确。 我定义了新的头文件SeqList.h,再创建C源文件文件。

实际操作如下: ①创建SeqList.h头文件 ②创建结构体

代码语言:javascript复制#ifndef _SeqStack_H_ #define _SeqStack_H_ #include #define MaxStackSize 100 typedef struct { DataType stack[MaxStackSize]; int top; }SeqStack;

③创建顺序表

代码语言:javascript复制//初始化 void StackInitiate(SeqStack* S)//初始化顺序堆栈S { S->top = 0;//初始化栈顶下标值 } int StackNotEmpty(SeqStack S) //判断顺序堆栈 S 非空否,非空则返回 1,否则返回 0 { if (S.top top >= MaxStackSize) { printf("堆栈已满无法插入!\n"); return 0; } else { S->stack[S->top] = x; S->top++; return 1; } } //出栈 int StackPop(SeqStack* S, DataType* d) //取出顺序堆栈S的栈顶数据元素值由参数d带回,出栈成功则返回1,否则返回0 { if (S->top top--; *d = S->stack[S->top]; return 1; } } //取栈顶数据元素 int StackTop(SeqStack S, DataType* d) { if (S.top


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3