顺序栈实现括号匹配
来源:互联网 发布:反电信网络诈骗 编辑:程序博客网 时间:2024/06/11 16:20
//采用顺序栈编程实现:表达式的括号是否匹配问题。//要求:输入带括号的表达式,判断其中括号是否配对。//扩展功能:给出配对括号的位序和不配对括号的位序。#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <algorithm>#define OVERFLOW -2#define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define ERROR 0#define OK 1using namespace std;typedef struct{ char c; int pos;} Brack,*Bracket;typedef struct{ Bracket base; Bracket top; int stacksize;} SqStack;int InitStack(SqStack &S){ S.base=(Bracket)malloc(STACK_INIT_SIZE*sizeof(Brack)); if(!S.base) return ERROR; S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK;}Brack GetTop(SqStack S,Brack e){ if(S.top==S.base) exit(OVERFLOW); S.top--; e=*S.top; return e;}int Push(SqStack &S,Brack e){ if(S.top-S.base>=S.stacksize) { S.base=(Bracket)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(Brack)); if(!S.base) exit(OVERFLOW); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top=e; S.top++; return OK;}int Pop(SqStack &S, Brack &e){ if(S.base==S.top) return ERROR; e=*(S.top-1); S.top--; return OK;}bool equal_e(char a,char b){ if(a=='('&&b==')') return true; else if(a=='{'&&b=='}') return true; else if(a=='['&&b==']') return true; else return false;}char ch[100];int match[100];int nomatch[100];int p=0,q=0;bool find_brack(SqStack S,char e){ int flag=0; while(S.base!=S.top) { S.top--; if(equal_e(S.top->c,e)) { flag=1; match[p++]=S.top->pos; break; } } if(flag==1) return true; else return false;}void fun(){ SqStack S; InitStack(S); Brack b; for(int i=0; i<strlen(ch); i++) { if(ch[i]=='{'||ch[i]=='('||ch[i]=='[') { b.c=ch[i]; b.pos=i+1; Push(S,b); } //GetElem(S); if(ch[i]=='}'||ch[i]==')'||ch[i]==']') { if(find_brack(S,ch[i])) { do { Pop(S,b); if(equal_e(b.c,ch[i])) { break; } else { nomatch[q++]=b.pos; } } while(true); } else { nomatch[q++]=i+1; //cout<<"fun"<<i+1<<endl; } } } while(S.base!=S.top) { Pop(S,b); nomatch[q++]=b.pos; } if(q!=0) { cout<<"括号匹配失败!"<<endl; if(p!=0) { cout<<"匹配成功的括号位序是:"<<endl; sort(match,match+p); for(int i=0; i<p; i++) { cout<<match[i]<<" "; } cout<<endl; } cout<<"匹配不成功的括号位序是:"<<endl; sort(nomatch,nomatch+q); for(int i=0; i<q; i++) { cout<<nomatch[i]<<" "; } cout<<endl; cout<<"注:这里的位序是指括号在表达式中的位置顺序!"<<endl; } else { cout<<"表达式中的括号均是配对的。"<<endl; }}int main(){ cin>>ch; fun(); return 0;}
1 0
- 括号匹配--顺序栈实现
- 顺序栈实现括号匹配
- 顺序栈实现括号匹配
- 用顺序栈实现匹配括号功能
- 利用顺序栈实现括号匹配
- 顺序栈—括号匹配
- 栈的顺序实现以及括号匹配判断程序
- 5.基于顺序栈 实现 检测括号匹配程序
- C语言实现顺序栈的括号匹配
- C/C++数据结构通过顺序栈实现括号()匹配算法
- 栈实现括号匹配
- 栈实现括号匹配
- 栈实现括号匹配
- 栈实现括号匹配
- 括号匹配---栈实现
- 栈实现括号匹配
- 栈实现括号匹配
- 括号匹配,栈实现
- spark基础知识二
- windows下安装nginx
- PHP常用函数大全
- Shell脚本输出斐波拉契数列前十项,每行显示两个数
- [学习笔记]学习主题模型(Topic Model)和PLSA( probabilistic latent semantic analysis)
- 顺序栈实现括号匹配
- Android如何解决异常问题
- 深入理解JVM03--理解GC日志
- 顺序栈的操作
- Spring JMS---三种消息监听器
- 浮点数的原罪
- 类的成员变量,对象,静态变量
- Hive 远程模式安装
- 每日一题之动归-换钱的最少次数(二)