实现括号匹配算法(括号匹配的检验算法完整程序) |
您所在的位置:网站首页 › 为什么境外输入病例那么多外国机场不检查吗 › 实现括号匹配算法(括号匹配的检验算法完整程序) |
大家好,又见面了,我是你们的朋友全栈君。 实现括号匹配算法(顺序表)括号匹配问题 假设一个算术表达式中包含圆括号、方括号和花括号三种类型的括号,编写一个函数,用来判别表达式中的括号是否正确配对,并设计一个测试主函数。 【算法思想】 在算术表达式中,右括号和左括号匹配的次序正好符合后到的括号要最先被匹配的“后进先出”堆栈操作特点,因此可以借助一个堆栈来进行判断。 括号匹配共有以下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 |