#include<stdio.h>
/*
* Name: MathchBrackets
* Author: Jachin
* Date:2016.11.11
*/
#include<math.h> //含有overflow
#include<malloc.h> //malloc,realloc
#include<process.h> //exit()
#define S_SIZE 100 //栈的空间大小
#define Stackincrement 10 //增加空间
struct Sqstack{ //定义栈的结构
int *base; //栈底
int *top; //栈顶
int stacksize; //栈当前的存储空间
};
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+Stackincrement)*sizeof(int));
S.top=S.base+S.stacksize;
S.stacksize=S.stacksize+Stackincrement;
}
*(S.top)=e;
S.top++;
}
void pop(Sqstack &S,int &e) //出栈
{
if(S.base!=S.top)
{
S.top--;
e=*S.top;
}
}
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("括号不匹配\n");
exit(OVERFLOW);
}
break;
default:
p++; //其他字符串后移
}
}
if(StackEmpty(s))
printf("括号匹配成功!\n");
else
printf("缺少右括号!\n");
printf("\n");
}
![这里写图片描述](http://img.blog.csdn.net/20161111170630860)
数据结构-栈-括号匹配
最新推荐文章于 2019-05-08 22:38:39 发布