#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef char SElemType;
typedef int Status;
#define MAXSIZE 20
#define ERROR 0
#define OK 1
typedef struct Stack
{
SElemType data[MAXSIZE];
int top;
}Stack;
bool Init(Stack* &S) /*初始化栈*/
{
S = (Stack*)malloc(sizeof(Stack));
S->top = 0;
if(S)
{
printf("栈初始化完成!\n");
return true;
}
else
return false;
}
bool Empty(Stack* &S) /*判断栈是否为空*/
{
if(S->top == 0)
{
printf("栈空!\n");
return true;
}
else
{
printf("栈不空!\n");
return false;
}
}
void Destory(Stack* &S) /*销毁栈*/
{
free(S);
printf("已销毁!\n");
}
Status Push(Stack* &S,SElemType e) /*压栈*/
{
if(S->top == MAXSIZE)
{
printf("栈满,压入失败!\n");
return ERROR;
}
else
{
S->data[S->top] = e; //从0号单元存储
S->top++;
return OK;
}
}
Status Pop(Stack* &S,SElemType &e) /*出栈,*e标记出栈元素*/
{
if(S->top == 0)
return ERROR;
else
{
S->top--;
e = S->data[S->top];
return OK;
}
}
Status Gettop(Stack* &S,SElemType e)
{
if(S->top == 0)
return ERROR;
else
{
S->top--;
e = S->data[S->top];
S->top++;
return e;
}
}
int PairStack(Stack* &S,char sys[MAXSIZE])
{
int i;
char left,right,left2,e;
for(i = 0;i < strlen(sys);i++)
{
if(sys[i] == '('||sys[i] == '{'||sys[i] == '[')
{
left = sys[i];
Push(S,left);
}
else
{
right = sys[i];
left2 = Gettop(S,e);
if((left2 == '('&&right == ')')||(left2 == '{'&& right == '}')||(left2 == '['&&right == ']'))
{
Pop(S,e);
}
}
}
if(Empty(S))
{
printf("配对成功!\n");
return OK;
}
else
{
printf("匹配失败!\n");
return ERROR;
}
}
int main()
{
char a[MAXSIZE],b[MAXSIZE];
strcpy(a,"[{}]");
printf("符号串1为:%s\n",a);
Stack* S;
Init(S);
PairStack(S,a);
strcpy(b,"{[}]()");
printf("符号串2为:%s\n",b);
PairStack(S,b);
return 0;
}