本文共 1723 字,大约阅读时间需要 5 分钟。
括号匹配,栈的应用
#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 10typedef 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;}
转载地址:http://cjpm.baihongyu.com/