首页 > 代码库 > 括号匹配算法 C语言实现
括号匹配算法 C语言实现
#include <stdio.h>#include <malloc.h> //malloc,realloc#include <math.h> //含有overflow#include <process.h> //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;}}
检测表达式中的字符,若是左括号就入栈,如果是右括号就出栈一个元素与其配对,配对成功则继续访问下一个字符,否则退出。出现非括号字符则跳过。
括号匹配算法 C语言实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。