看到一道题关于数据结构的括号匹配的问题,要求使用栈进行操作,如果遇到到的是左括号就进栈,如果读入的是右括号就把前一个入栈的左括号取出出栈,比较他们两个是否匹配,代码如下:
#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;
}
}