数据结构之括号匹配问题的解决
2016-10-25 18:53
477 查看
经过这几天的思索,终于完成了括号匹配问题算法的实现,不多说,把代码献出来,有问题请大家多指教
#include<stdio.h> #include<stdlib.h> #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef char SElemType; typedef struct { SElemType *base; //栈底 SElemType *top; //栈顶 int stacksize; //当前可用最大容量 }SqStack; void InitStack (SqStack &S){ S.base=(SElemType*)malloc(STACK_INIT_SIZE *sizeof(SElemType)); if (!S.base) exit (0); //存储分配失败 S.top = S.base; S.stacksize = STACK_INIT_SIZE; } void 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 (0); //存储分配失败 S.top = S.base + S.stacksize; S.stacksize += STACKINCREMENT; } *S.top=e; S.top++; } void Pop (SqStack &S, SElemType &e) { // 若栈不空,则删除S的栈顶元素, // 用e返回其值,并返回OK; // 否则返回ERROR if (S.top == S.base) exit(0); --S.top; e=*S.top; } void GetTop (SqStack S, SElemType &e) { // 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR if (S.top == S.base) exit(0); e = *(S.top-1); } void main( ){ SqStack s; SElemType e,ch; int flag=1; InitStack(s); ch=getchar(); while(ch!='#'&&flag){ switch(ch){ case'[': Push(s,ch);break; case'(':Push(s,ch);break; case ']' : if(s.top !=s.base){ GetTop(s,e); if(e='['){ Pop(s,e); flag=1; } else flag=0; } else exit(0); break; case ')' : if(s.top!=s.base){ GetTop(s,e); if(e=='('){ Pop(s,e); flag=1; } else flag=0; } else exit(0); break; default :break; } scanf(" %c",&ch); } if(flag==1) printf("YES"); else printf("NO"); }
相关文章推荐
- 数据结构之栈的应用:括号匹配问题
- c++,数据结构之括号匹配问题
- 数据结构课程设计:括号匹配问题(实现检验匹配并输出不匹配的位置)
- 数据结构之栈之括号匹配问题
- 数据结构——栈的应用 NOI2.2 括号匹配问题
- 奥运场馆规划问题(数据结构解决)
- SDUT 2134 数据结构实验之栈四:括号匹配
- 数据结构大作业中遇到的问题及解决(一)
- 寒假第三天--栈和队列--数据结构实验之栈四:括号匹配 (数组)
- [2134]数据结构实验之栈四:括号匹配 sdutOJ
- 数据结构实验之栈四:括号匹配
- SUDT 2134 - 数据结构实验之栈四:括号匹配
- 问题解决——在结构体中使用set保存结构体数据
- 数据结构(C#)--利用动态规划解决0-1背包问题
- 黑马程序员--C语言之数据结构解决问题
- 利用栈结构判断括号匹配问题
- 用C++链式栈解决数据结构中的括号匹配问题。
- 数据结构之 栈的应用 括号匹配
- 数据结构之 栈的应用 括号匹配
- [2134]数据结构实验之栈四:括号匹配 sdutOJ