栈实现括号匹配
来源:互联网 发布:淘宝怎么找类似店铺 编辑:程序博客网 时间:2024/06/06 17:07
算法:检测表达式中的字符,若是左括号就入栈,如果是右括号就出栈一个元素与其配对,配对成功则继续访问下一个字符,否则退出。出现非括号字符则跳过。
- #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;}
- }
转载于: http://blog.csdn.net/kkkkkxiaofei/article/details/8293980
阅读全文
0 0
- 栈实现括号匹配
- 栈实现括号匹配
- 栈实现括号匹配
- 栈实现括号匹配
- 括号匹配---栈实现
- 栈实现括号匹配
- 栈实现括号匹配
- 括号匹配,栈实现
- 栈实现括号匹配
- 链栈实现括号匹配
- 括号匹配(栈实现)
- 用栈实现括号匹配
- 括号匹配问题--栈实现
- 栈的实现-括号匹配
- java栈实现括号匹配
- 括号匹配(链栈实现)
- 括号匹配--顺序栈实现
- 用栈实现括号匹配
- Java中的23种设计模式
- python里面对文件的读写操作
- 机器学习之Logistic回归(五)
- java几种常用设计模式简单示例
- wion10 cuda8.0+cudnn+vs2013+matlab2015b+matconvnet编译
- 栈实现括号匹配
- 十六进制转十进制
- ortp库移植到arm平台进行文件传输测试
- mysql主从复制
- 1006. Sign In and Sign Out (25)
- MySql存储过程及调用
- SQLServer实现Oracle中的translate函数
- Java内存管理个人理解
- java23种设计模式概览