数据结构 栈应用(括号匹配检测)
2012-05-01 16:47
573 查看
#include <stdio.h> #include <stdlib.h> #include <math.h> #define OK 1 #define ERROR 0 #define STACK_INIT_SIZE 10 #define STACKINCREMENT 2 typedef int Status; typedef char SElemType; typedef struct SqStack { SElemType *base; SElemType *top; int stacksize; }SqStack; Status InitStack(SqStack *S) { (*S).base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if (!(*S).base) exit(OVERFLOW); (*S).top = (*S).base; (*S).stacksize = STACK_INIT_SIZE; return OK; } Status StackEmpty(SqStack S) { if (S.base == S.top) return OK; else return ERROR; } Status Push(SqStack *S,SElemType e) { if ((*S).top - (*S).base >= (*S).stacksize) { (*S).base = (SElemType *)realloc((*S).base,((*S).stacksize + STACKINCREMENT)*sizeof(SElemType)); if (!(*S).base) exit(OVERFLOW); (*S).top = (*S).base + (*S).stacksize; (*S).stacksize +=STACKINCREMENT; } *((*S).top)++ = e; return OK; } Status Pop(SqStack *S,SElemType *e) { if ((*S).base == (*S).top) return ERROR; *e = *--(*S).top; return OK; } void main() { SqStack S; SElemType ch[100],*p,e; if(InitStack(&S)) { printf("请输入表达式\n"); gets(ch); p = ch; while (*p) switch(*p) { case '(': case '[':Push(&S,*p++); break; case ')': case ']':if(!StackEmpty(S)) { Pop(&S,&e); if(*p == ')' && e != '(' || *p == '[' && e != ']') { printf("左右括号不配对"); exit(OVERFLOW); } else { p++; break; } } else { printf("缺乏左括号!\n"); exit(ERROR); } default : p++; } if(StackEmpty(S)) printf("左右括号匹配!\n"); else printf("缺少右括号!\n"); } }
相关文章推荐
- 【数据结构】栈的应用——检测括号是否匹配
- 重温数据结构-栈的应用:进制转换,括号匹配检测,行编辑,迷宫求解,求表达式的值
- 【学习点滴-数据结构-栈&队列】 栈的应用之二:括号匹配的检测
- imooc数据结构探险-栈篇 栈应用括号匹配二 由群友启发改良james_yuan老师算法
- C语言数据结构----栈的应用(程序的符号匹配检测)
- 栈的应用实践之括号匹配的检测
- 数据结构的应用——使用栈实现字符串括号匹配检查
- 数据结构题典021:栈的应用——括号匹配的检验(C++)
- 【数据结构】栈的应用 括号匹配
- <数据结构>栈的应用一:括号匹配检测
- 数据结构-栈的实现之括号匹配检测
- 数据结构-C语言 栈的简单应用——括号匹配
- C语言数据结构----栈的应用(程序的符号匹配检测)
- 数据结构复习_栈和队列,应用_括号匹配&文件目录递归拷贝,
- 数据结构-栈的应用-算术表达式小括号匹配
- 【数据结构】用栈检测括号是否匹配
- 数据结构(8)--栈的应用之行编辑程序、括号匹配检验、数制转换、hanio塔问题
- java栈的应用:实现括号匹配检测
- 数据结构应用-----------括号匹配的检验
- c语言:括号匹配检测(栈的应用)