求一个括号匹配的代码 栈 c语言

括号匹配用栈实现数据结构 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;
}

运行结果:

img

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;
}