程序代码如下:
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OVERFLOW -2
#define OK 1
#define ERROR 0
typedef char SElemType;
//栈结构体
typedef struct {
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
int InitStack(SqStack *S);//初始化栈
int Push(SqStack *S,SElemType e);//入栈
int Pop(SqStack *S,SElemType *e);//删除栈中的元素
int DestoryStack(SqStack *S);//销毁栈
//初始化栈
int InitStack(SqStack *S) {
S->base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S->base) {
exit(OVERFLOW);
}
S->top = S->base;
S->stacksize = STACK_INIT_SIZE;
return OK;
}
//入栈
int 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;
}
//删除栈中的元素
int Pop(SqStack *S,SElemType *e) {
if(S->top == S->base) return ERROR;
*e = *--S->top;
return OK;
}
//销毁栈
int DestoryStack(SqStack *S) {
S->top = S->base;
free(S->base);
S->top = NULL;
S->base = NULL;
return OK;
}
//进行括号匹配
int Match(SqStack *S) {
char ch,c;
InitStack(S);
ch = getchar();
while(ch != '\n') {
if(ch=='('||ch=='[') {
Push(S,ch);
}
if(ch==')') {
Pop(S,&c);
if(c!='(') {
return ERROR;
}
}
if(ch==']') {
Pop(S,&c);
if(c!='[') {
return ERROR;
}
}
ch = getchar();
}
return OK;
}
int main()
{
SqStack *sq;
int f;
f = Match(sq);//进行括号匹配检验
if(f) printf("括号全部匹配!\n");
else printf("括号匹配失败!\n");
DestoryStack(sq);//将栈销毁
return 0;
}