括号匹配(链栈实现)
2014-11-01 23:03
363 查看
/* 建立链栈实现括号匹配问题 创建栈,判断是否空栈 */ #include<stdio.h> #include<stdlib.h> #include<string.h> #define status int typedef struct node { char ch; node* next; }SNode; typedef struct { SNode *top; //SNode *base; }Stack; //创建空栈 base 赋值为NULL, top 指向栈顶元素 status initStack(Stack &S) { S.top=NULL; return 0; } bool empty(Stack S) { if(NULL==S.top) return 1; return 0; } status pushStack(Stack &S,char e) //入栈 { SNode* p; p=(SNode*)malloc(sizeof(SNode)); if(NULL==p) { printf("内存分配失败,终止程序!\n"); exit(-1); } p->ch=e; p->next=S.top; S.top=p; //printf("%c入栈成功\n",e) ; return 0; } status popStack(Stack &S,char &e) //出栈 { SNode *q; if(NULL!=S.top) { // printf("%X&&\n",S.top); e=S.top->ch; q=S.top; S.top=q->next; free(q); //printf("%c成功出栈\n\n",e) ; return 1; } else { printf("栈为空,出栈失败!\n"); return 0; } } status clearStack(Stack &S) //清空栈 { while(NULL!=S.top) { SNode *q; q=S.top; free(q); S.top=S.top->next; } } status matching(Stack &S,char str[],int len) { int i;char e; for(i=0;i<len;++i) { if(str[i]=='{'||str[i]=='['||str[i]=='(') pushStack(S,str[i]); else if(empty(S)) { printf("不匹配\n"); return 0 ; } else { if(str[i]=='}') { if(S.top->ch=='{') popStack(S,e); else { printf("不匹配\n") ; return 0 ; } } else if(str[i]==']') { if(S.top->ch=='[') popStack(S,e); else { printf("不匹配\n"); //printf("不匹配,到来不速之客\n") ; return 0 ; } } else if(str[i]==')') { if(S.top->ch=='(') popStack(S,e); else { printf("不匹配\n"); return 0 ; } } } } if(empty(S)) printf("匹配\n"); else { printf("不匹配\n"); } } status main() { Stack S; initStack(S); int i,len; char str[20],ch; while(~scanf("%s",str)) { len=strlen(str); matching(S,str,len); clearStack(S); } return 0; }
相关文章推荐
- 链栈实现括号匹配
- 运用单链表实现链栈,并实现括号匹配---作业
- 链栈的简单实现及括号匹配问题的链栈解决方法
- 链栈实现括号匹配
- 括号匹配(栈实现)
- 括号匹配(栈实现)
- 栈的链表实现,以及编译原理中的括号匹配
- 用栈实现括号匹配的检验
- 栈的顺序实现以及括号匹配判断程序
- 15数组实现顺序堆栈的括号匹配问题
- 括号匹配(栈实现)
- 栈的C++实现及用于括号匹配
- 实现所有括号的合法匹配
- STL实现括号匹配
- 利用栈实现括号匹配算法!
- 数据结构(C语言)读书笔记6:栈的应用之括号匹配的C代码实现
- 栈的实现和括号匹配
- 数据结构课程设计:括号匹配问题(实现检验匹配并输出不匹配的位置)
- 数据结构的应用——使用栈实现字符串括号匹配检查
- 用栈来实现括号匹配之优酷笔试题