栈的应用之括号匹配

#include <stdio.h>
#include <string.h>

#define MAXSIZE 110
#define TRUE 1
#define FALSE 0

typedef char ElemType;
typedef int Status;

typedef struct
{
  ElemType data[MAXSIZE];
  int top;
}SeqStack;

void InitStack(SeqStack *s)
{
    (*s).top = 0;
}

Status StackEmpty(SeqStack s)
{
    if(s.top==0) return 0;
    return 1;
}

void Push(SeqStack *s, char ch)
{
    (*s).data[(*s).top]=ch;
    (*s).top++;
}

Status Pop(SeqStack *s, char ch)
{
    if(!StackEmpty(*s)) return FALSE;
    (*s).top--;
    return TRUE;
}

int main()
{
    char ch;
    int flag, k;
    SeqStack s;
    InitStack(&s);

    printf("请输入一个由[]、{}和()组成的字符串
");
    flag=k=1;

    while(scanf("%c", &ch), ch!='
')
    {
        if((s.data[s.top-1]=='['&&ch==']')&&s.top>=1)
       {
           k=Pop(&s, ch);
           if(!k) flag=0;
       }
       else if(s.data[s.top-1]=='('&&ch==')' &&s.top>=1)
       {
           k=Pop(&s, ch);
           if(!k) flag=0;
       }
       else if(s.data[s.top-1]=='{'&&ch=='}' &&s.top>=1)
       {
           k=Pop(&s, ch);
           if(!k) flag=0;
       }
       else
       {
           Push(&s, ch);
       }
    }

   if(StackEmpty(s)) flag=0;
    if(flag) printf("该字符串括号完全匹配.
");
    else printf("该字符串括号不完全匹配.
");

    return 0;
}
原文地址:https://www.cnblogs.com/daydayupacm/p/5982151.html