分享

利用栈实现括号匹配算法!

 收藏小管 2017-04-24

算法:检测表达式中的字符,若是左括号就入栈,如果是右括号就出栈一个元素与其配对,配对成功则继续访问下一个字符,否则退出。出现非括号字符则跳过。

#include #include //malloc,realloc#include //含有overflow#include //exit()#define S_SIZE 100 //栈的空间大小#define STACKINCREAMENT 10//增加空间struct SqStack{ int *base; //栈底 int *top; //栈顶 int stacksize; //栈当前的存储空间};void main(){//子函数声明 void InitStack(SqStack &S);//初始化空栈 int StackEmpty(SqStack S);//判空 void push(SqStack &S,int e);//进栈 void pop(SqStack &S,int &e);//出栈 //主函数开始 SqStack s;//初始化空栈 InitStack(s); char ch[100],*p;int e; p=ch; printf('输一个含义有()[]{}的括号表达式:\n'); gets(ch); while(*p) { switch (*p) { case '{': case '[': case '(': push(s,*p++);break;//只要是左括号就入栈 case '}': case ']': case ')':pop(s,e); if ((e=='{' && *p=='}') ||(e=='[' && *p==']') || (e=='(' && *p==')')) p++; else {printf('括号不匹配!');exit(OVERFLOW);} break; default :p++;//其他字符就后移 } } if (StackEmpty(s)) printf('括号匹配成功'); else printf('缺少右括号!'); printf('\n');}void InitStack(SqStack &S){S.base=(int *)malloc(S_SIZE*sizeof(int));S.stacksize=S_SIZE;S.top=S.base;//初始化空栈}int StackEmpty(SqStack S){ if(S.base==S.top) return 1; else return 0;}void push(SqStack &S,int e){//进栈 if(S.top-S.base>=S.stacksize) {S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREAMENT)*sizeof(int)); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREAMENT;} *(S.top)=e; S.top++; }void pop(SqStack &S,int &e){//出栈 if(S.base!=S.top) {S.top--; e=*S.top;}}


 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多