C语言实现括号匹配问题
2017-08-23 16:03
471 查看
C语言利用栈的“先进后出”的思想,实现括号匹配的问题,源代码如下所示:
#include <stdio.h> #include <stdlib.h> #define MAX_LEN 1024 typedef char ElemType; typedef struct sqstack { ElemType Elems[MAX_LEN]; int top; /*栈顶元素的下标,栈的元素个数为top+1*/ }Sqstack; ElemType GetTop(Sqstack *s); Sqstack *InitStack(); ElemType Pop(Sqstack *s); int Push(Sqstack *s,ElemType data); int StackIsEmpty(Sqstack *s); int chioce(); int main() { chioce(); return 0; } /*初始化一个顺序栈*/ Sqstack *InitStack() { Sqstack *s = malloc(sizeof(*s)); s->top = -1; return s; } /*判断一个栈是否为空。如果为空,返回1,否则返回0*/ int StackIsEmpty(Sqstack *s) { if(s) { return s->top == -1; } return -1; } /*入栈,压栈*/ int Push(Sqstack *s,ElemType data) { if(s) { s->Elems[++s->top] = data; return 0; } return -1; } /*出栈*/ ElemType Pop(Sqstack *s) { if(s) { return s->Elems[s->top--]; } } /*返回栈顶元素的值,但不是出栈*/ ElemType GetTop(Sqstack *s) { if(s) { return s->Elems[s->top]; } } int chioce() { Sqstack *stack = InitStack(); //初始化栈 char str[256]; //字符型数据 gets(str); //输入字符 int num = 0; int i=0; while(str[i] != '\0') { if(str[i]=='(' || str[i]=='[' || str[i]=='{') { Push(stack,str[i]); //入栈 num = 1; } else if(str[i]==')' || str[i]==']' || str[i]=='}') { if(StackIsEmpty(stack)) //如果栈为空 { printf("brackets match false\n"); return 0; } if(str[i]==')' && GetTop(stack)=='(' || str[i]==']' && GetTop(stack)=='[' || str[i]=='}' && GetTop(stack)=='{') //括号匹配 { Pop(stack); //出栈 num = 1; } else { printf("brackets match false\n"); return 0; } } i++; } if(num == 0) { printf("no bracket\n"); } else { if(StackIsEmpty(stack)) //当栈为空 { printf("brackets match true\n"); } else { printf("brackets match false\n"); } } return 0; }
相关文章推荐
- 括号匹配问题 栈的应用 C语言实现
- 数据结构之---C语言实现括号匹配(栈实现)
- C语言实现顺序栈的括号匹配
- 数据结构(18)栈典型问题之C++实现括号匹配
- C语言 括号匹配问题
- c语言实现括号匹配 栈的思想
- C语言实现括号配对问题
- 括号匹配问题--栈实现
- 括号匹配问题——用栈实现
- c语言栈的应用之括号匹配问题
- 括号匹配问题——用栈实现
- 用c语言用栈编程的括号匹配问题
- 括号匹配问题——用栈实现
- JS简单实现括号匹配问题
- 15数组实现顺序堆栈的括号匹配问题
- 利用C语言中后进先出的栈的概念实现括号匹配
- 括号匹配问题——用栈实现
- 括号匹配问题,用栈实现
- 括号匹配问题(顺序栈实现)
- 数据结构-----栈实现括号匹配问题