检测括号是否匹配的算法中,栈的特性是最符合括号特点的。栈的先进后出将括号的匹配正好完美实现。
思想:
从字符串开头向后逐个检测,检测到除括号外的元素就跳过。检测到左括号时,就进行入栈操作,继续向后检测。检测到有括号时,就检查栈顶元素是否是匹配的左括号。若不匹配,则直接返回错误信号,使程序结束;若匹配,进行出栈操作,继续向后检测。结束时,要判断栈是否为空,若不为空,则括号不匹配;若为空,则括号匹配。
代码:
#include
#include
#include
#define STA_SIZE50//栈的大小
#define BUF_SIZE50//输入字符串的大小
//栈的声明
struct stack{
char sta[STA_SIZE];
int top;
};
//判断栈是否为空
int if_empty(struct stack* psta)
{
if(psta->top == -1)
return 0;
else
return 1;
}判断栈是否为满
int if_full(struct stack* psta)
{
if(psta->top == STA_SIZE - 1)
return 1;
else
return 0;
}//初始化栈
v