括号匹配
来源:互联网 发布:linux执行sh文件命令 编辑:程序博客网 时间:2024/05/21 21:41
看到一道题关于数据结构的括号匹配的问题,要求使用栈进行操作,如果遇到到的是左括号就进栈,如果读入的是右括号就把前一个入栈的左括号取出出栈,比较他们两个是否匹配,代码如下:
<span style="font-size:24px;">#include <stdio.h> #include <stdlib.h> #define S_SIZE 100 //栈的空间大小 struct SqStack{ int *base; //栈底 int *top; //栈顶 int stacksize; //栈当前的存储空间 }; //声明栈要使用的函数 void InitStack(SqStack &S);//初始化空栈 int StackEmpty(SqStack S);//判空 void push(SqStack &S,int e);//进栈 void pop(SqStack &S,int &e);//出栈 int main() { 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(1); } break; default :p++;//其他字符就跳过 } } if (StackEmpty(s)) printf("括号匹配成功"); else printf("缺少右括号!"); printf("\n"); return 0; } void InitStack(SqStack &S) //初始化空栈 {S.base=new int[S_SIZE]; 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)//判满 {printf("栈满\n");exit(1); } *(S.top)=e; S.top++; } void pop(SqStack &S,int &e) //出栈 { if(S.base!=S.top) {S.top--; e=*S.top;} } </span>
0 0
- 括号括号括号匹配
- 括号匹配
- 括号匹配
- 括号匹配
- 括号匹配
- 括号匹配/()[]
- 括号匹配
- 括号匹配
- 括号匹配
- 括号匹配
- 括号匹配!!!!
- 括号匹配
- 括号匹配
- 括号匹配
- 括号匹配
- 括号匹配
- 括号匹配
- 括号匹配
- 安卓踩过的坑
- ubuntu环境变量的相关问题
- C++“准”标准库Boost学习指南(3):Boost.Utility
- 百度地图导航初始化失败问题总结
- Mac下解决SVN:155036
- 括号匹配
- No mapping found for HTTP request with URI [/Demo/WEB-INF/page/login.jsp] in DispatcherServlet with
- 使用Log4Net - 文件日志 和 SqlServer日志
- C语言带参宏定义
- office 2013出现的各种问题及解决方法(win10 14393版本)
- (示例4)动态加载使用教程
- InnoDB: which exceeds the log group capacity
- ArrayList源码分析
- HTML5 geolocation API的用法