【 数据结构 (C语言)】栈的应用(二)——括号匹配问题

括号匹配问题

/**
**  2017.11.4
**  Ahthor:799
**  数制转换
**
***/
#include <bits/stdc++.h>
using namespace std;
#define STACK_INIT_SIZE 100 /// 存储空间初始分配
#define STACK_INCREMENT 10 /// 存储空间分配增量
#define ElemType char
#define Status int
#define OK 1
#define ERROR -1
#define OVERFLOW -2
typedef struct
{
    ElemType *base;
    ElemType *top;
    int stacksize;
} SqStack;
Status InitStack (SqStack &S)
{
    S.base = (ElemType * )malloc(STACK_INIT_SIZE * sizeof(ElemType));
    if (!S.base) exit(OVERFLOW);
    S.top = S.base;
    S.stacksize = STACK_INIT_SIZE;
    return OK;
}
Status DestroyStack(SqStack &S)
{
    for (ElemType *index = S.base; index != S.top; index ++)
    {
        free(index);
    }
    free(&S);
    return OK;
}
Status ClearStack(SqStack &S)
{
    for (ElemType *index = S.base+1; index != S.top; index ++)
    {
        free(index);
    }
    S.top = S.base;
    return OK;
}
Status IsEmptyStack(SqStack &S)
{
    if (S.base == S.top) return true;
    else return false;
}
Status LengthStack(SqStack &S)
{
    return S.top - S.base;
}
ElemType  GetTop(SqStack &S)
{
    if (S.top == S.base) return ERROR;
    ElemType e = *(S.top - 1);
    return e;
}
Status Push(SqStack &S,ElemType &e)
{
    if (S.top - S.base >= S.stacksize)
    {
        S.base = (ElemType *) realloc (S.base,(S.stacksize + STACK_INCREMENT) * sizeof(ElemType));
        if (!S.base)exit(OVERFLOW);
        S.top = S.base + S.stacksize;
        S.stacksize += STACK_INCREMENT;
    }
    *S.top = e;
    S.top ++;
    return OK;
}
Status Pop(SqStack &S, ElemType &e)
{
    if (S.top == S.base) return ERROR;
    e = * --S.top;
    return OK;
}
Status TrverseStack(SqStack &S)
{
    for (ElemType *index = S.base; index != S.top; index ++)
    {
        cout<<*index<<" ";
    }
    cout<<endl;
    return OK;
}
int main()
{
    SqStack * St = (SqStack *) malloc(sizeof(SqStack));
    InitStack (*St);
    char str[50];
    cin>>str;
    for (int i=0; i<strlen(str) ; i++)
    {
        if (str[i] == '(' || str[i] == '{' || str[i] == '[')
        {
            Push(*St,str[i]);
        }
        else if (str[i] == ')' || str[i] == '}' || str[i] == ']')
        {
            char r_char;
            Pop(*St,r_char);
        }
    }
    if (IsEmptyStack(*St))
    {
        cout<<" Yes "<<endl;
    }
    else cout<<" NO "<<endl;
    return 0;
}



原文地址:https://www.cnblogs.com/sxy-798013203/p/7783156.html