括号匹配用栈实现数据结构 C语言 1️⃣2️⃣3️⃣3️⃣4️⃣5️⃣6️⃣7️⃣9️⃣/
#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[] = { '[','(',')',']','[',']' };
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;
}
运行结果:
typedef char SElemType;
#include"Stack.h"
int kuohaopipei()
{
char p;
SqStack s;
char temp;
InitStack(s);
p=getchar();
while(p!='\n')
{
if(p=='('||p=='['||p=='{')
Push(s,p);
else if(p==')'||p==']'||p=='}')
{
if(StackEmpty(s)) return ERROR;
Pop(s,temp);
if(p==')'&&temp!='(') return ERROR;
if(p==']'&&temp!='[') return ERROR;
if(p=='}'&&temp!='{') return ERROR;
}
p=getchar();
}
if(!StackEmpty(s)) return ERROR;
return OK;
}
int main()
{
if(kuohaopipei()==OK)
printf("TRUE\n");
else
printf("FALSE\n");
return 0;
}