#define ElemType char
#define MaxSize 50
#include<stdio.h>
typedef struct
{
ElemType data[MaxSize];
int top;
}SqStack;
bool StackEmpty(SqStack S)
{
if (S.top == -1) //栈空
return true;
else
return false; //栈不空
}
bool Pop(SqStack& S, ElemType& x)
{
if (S.top == -1) //栈空 不能执行出栈操作
return false;
x = S.data[S.top]; //先出栈 指针再减1
S.top--;
return true;
}
bool Push(SqStack& S, ElemType x)
{
if (S.top == MaxSize - 1) //栈满 不能执行入栈操作
return false;
S.top++; //指针先加1,再入栈
S.data[S.top] = x;
return true;
}
bool GetPop(SqStack S, ElemType& x)
{
if (S.top == -1) //栈空报错
return false;
x = S.data[S.top]; //用x存储栈顶元素
return true;
}
void initStack(SqStack& S)
{
S.top = -1; //初始化栈顶指针
}
int main()
{
SqStack S;
initStack(S);
char sequence[] = {'[','(',')',']','\0'};
char* p = sequence;
while (*p != '\0')
{
if (*p == '(' || *p=='[')
{
Push(S, *p);
p++;
}
else
{
char getpop;
GetPop(S,getpop);
if ((getpop=='('&&*p==')')||(getpop == '[' && *p == ']')) //判断是否匹配
{
char pop;
Pop(S, pop);
p++;
}
else
{
printf("该序列不合法!");
return 0;
}
}
}
if (StackEmpty(S)) //判断最后栈是否为空
printf("该序列合法!");
else
printf("该序列不合法!");
return 0;
}
栈的应用:括号应用
最新推荐文章于 2024-10-08 23:20:34 发布