括号匹配,栈的应用
#include <stdio.h>
#include <stdlib.h>
#define true 1
#define false 0
#define ok 1
#define error 0
#define overflow -2
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int status;
typedef struct {
char *base;
char *top;
int stacksize;
}sqstack;
status initstack(sqstack &s) {//初始化stack;
s.base = (char *)malloc(STACK_INIT_SIZE * sizeof(char));
if (!s.base) exit(overflow);
s.top = s.base;
s.stacksize = STACK_INIT_SIZE;
return ok;
}
status push(sqstack &s, char e) {
if (s.top - s.base >= s.stacksize) {
s.base = (char *)realloc(s.base, (s.stacksize + STACKINCREMENT) * sizeof(char));
s.top = s.base + s.stacksize;
s.stacksize += STACKINCREMENT;
}
*s.top++= e;
return ok;
}
status pop(sqstack &s,char &e) {
if (s.base == s.top) return error;
e = *--s.top;
return ok;
}
status stackempty(sqstack s) {
if (s.base == s.top) return true;
else return false;
}
status gettop(sqstack s, char &e) {
if (s.top == s.base) return error;
e = *(s.top - 1);
return ok;
}
void judge(){
sqstack S;
initstack(S);
bool flag=true;
char op, a, b;
printf("请输入你要判断的这些括号(只能是“(、)、[、]”)\n");
op = getchar();
while (op != '\n'&& flag==true) {
switch (op) {
case '[':
case '(':push(S, op); break;
case ')':gettop(S, a); if (a == '(') pop(S,b);
else flag = false; break;
case ']':gettop(S, a); if (a == '[') pop(S,b);
else flag = false; break;
default: break;
}
op = getchar();
}
if (stackempty(S)) flag = true;
else flag = false;
if (flag) printf("匹配正确!");
else printf("匹配错误!");
}
int main() {
judge();
return 0;
}
本文介绍了一种使用C语言实现的括号匹配算法,通过栈结构来判断输入的字符序列中括号是否正确配对。从初始化栈、元素入栈和出栈操作,到空栈检查和顶部元素获取,一步步解析了关键函数。最后通过实际例子演示了整个过程并提供了一个完整的代码示例。
1672

被折叠的 条评论
为什么被折叠?



