用栈来实现 括号匹配
2016-04-19 19:13
225 查看
#include<stdio.h>#include<stdlib.h>#define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define OK 1#define ERROR 0#define OVERFLOW -2typedef int Status;typedef char SElemType;typedef struct{ SElemType *base; SElemType *top; int stacksize;} SqStack;Status InitStack(SqStack *S){ S->base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); S->top=S->base; S->stacksize=STACK_INIT_SIZE; return OK;}Status StackEmpty(SqStack *S){ if(S->top!=S->base) return ERROR; return OK;}Status Push(SqStack *S,SElemType e){ if(S->top-S->base>=S->stacksize) { S->base=(SElemType*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(SElemType)); if (!S->base)exit(OVERFLOW); S->top=S->base+S->stacksize; S->stacksize+=STACKINCREMENT; } *S->top++=e; return OK;}Status Pop(SqStack *S,SElemType*e){ if(S->top==S->base) return ERROR; *e=*--S->top; return OK;}Status Bracket(SqStack *S,char *str){ int i=0,flag1=0,flag2; SElemType e; while(str[i]!='\0') { switch(str[i]) { case '(': Push(S,'('); break; case '[': Push(S,'['); break; case '{': Push(S,'{'); break; case ')': { if(StackEmpty(S)) { flag1=1; break; } Pop(S,&e); if(e!='(') flag1=1; break; } case ']': { if(StackEmpty(S)) { flag1=1; break; } Pop(S,&e); if(e!='[') flag1=1; break; } case '}': { if(StackEmpty(S)) { flag1=1; break; } Pop(S,&e); if(e!='{') flag1=1; break; } default: break; } if(flag1) break; i++; } flag2=StackEmpty(S); if(!flag1 && flag2) printf("It is ok!\n"); else printf("It is error!\n"); return OK;}int main(){ char str[255]; SqStack S; InitStack(&S); printf("enter a cross:"); scanf("%s",str); Bracket(&S,str); printf("\n");}
相关文章推荐
- 机器学习总结_前言
- 高仿糗事百科学习(三)NET
- java设置代理服务器
- Xcode真机测试could not find developer disk image解决方法
- cf441ABC
- java初学者:类与对象 技术文章
- 利用 Travis CI 把 Android 项目部署到 github
- 堆排序
- arcgis_标注功能
- 程序员你为什么迷茫?
- 第二章ROS机器人操作系统的总体框架
- ZOJ - 3932 Handshakes (技巧)握手
- [C语言][LeetCode][86]Partition List
- springmvc jsp无法访问静态同目录的css js文件
- [SSM]使用MyBatis Generator自动创建代码
- 第八周实践项目2-用对象数据操作长方柱类
- 文本特征选择算法:卡方检验和信息增益
- WIN7下使用Xmanager连接rhel-server-6.2-i386配置
- node源码详解(七) —— 文件异步io、线程池【互斥锁、条件变量、管道、事件对象】
- App 上线流程