题目: 设表达式中包含三种括号:圆括号、方括号和花括号,它们可互相嵌套,如 ([{}]) 或 ({[][()]}) 等均为正确的格式,而 {[]})} 、{[() ]或 ([]} 均为不正确的格式。
利用栈的结构编写程序检验输入的括号表达式是否匹配。
思路: 利用栈“后进先出”的特点,每次读入一个括号:
(1)左括号:直接入栈等待匹配;
(2)右括号:
①栈为空说明没有与该右括号匹配的左括号,则该右括号多余;
②栈不为空则将该右括号与栈顶括号比较,若匹配则将栈顶元素出栈,若不匹配则说明左右括号类型不匹配。
当所有括号全部全部读完时,若栈为空则说明所有括号都匹配,若栈不为空则说明有左括号多余。
注意:只有左括号需要进栈,右括号不需要进栈。
完整代码+注释
# include<stdio.h>
# define Stack_Size 50
# define FALSE 0
# define TRUE 1
/*顺序栈的存储结构*/
typedef struct {
char elem[Stack_Size];
int top;
}SeqStack;
/*初始化顺序栈*/
void InitStack(SeqStack* S) {
S->top = -1;
}
/*顺序栈进栈*/
int Push(SeqStack* S, char x) {
if (S->top == Stack_Size - 1)
return FALSE;
S->top++; //修改栈顶指针
S->elem[S->top] = x; //x进栈
return TRUE;
}
/*顺序栈出栈*/
int Pop(SeqStack* S) {