数据结构实验之栈与队列四:括号匹配

来源:互联网 发布:办公软件站长网站 编辑:程序博客网 时间:2024/06/07 08:25
#include <iostream>#include <stdio.h>#include <malloc.h>#define maxsize 50+5using namespace std;bool flag;typedef struct Node{    int Top;    int Stacksize;    char A[maxsize];}*Stack;void MakeEmpty(Stack S){    S->Top = -1;}Stack CreatStack(){    Stack S;    S = (Stack)malloc(sizeof(struct Node));    if(S == NULL)        exit(-1);    S->Stacksize = maxsize;    MakeEmpty(S);    return S;}int IsEmpty(Stack S){    return S->Top == -1;}int IsFull(Stack S){    return S->Top >= S->Stacksize;}void Push(char X, Stack S){    if(IsFull(S))        exit(-1);    else        S->A[++S->Top] = X;}void Pop(Stack S){    if(!IsEmpty(S))        S->Top--;    else        exit(-1);}char Top(Stack S){    return S->A[S->Top];}void Del(Stack S){    S->Top = -1;}void Match(Stack S, char A[]){    for(int i=0; A[i] != '\0'; i++)    {        if(A[i] == '(' || A[i] == '[' || A[i] == '{')        {            flag = true;            Push(A[i], S);        }        else if(A[i] == ')')        {            if(IsEmpty(S))            {                flag = false;                break;            }            char a = Top(S);            if(a == '(')            {                Pop(S);                flag = true;            }            else            {                flag = false;                break;            }        }        else if(A[i] == ']')        {            if(IsEmpty(S))            {                flag = false;                break;            }            char a = Top(S);            if(a == '[')            {                Pop(S);                flag = true;            }            else            {                flag = false;                break;            }        }        else if(A[i] == '}')        {            if(IsEmpty(S))            {                flag = false;                break;            }            char a = Top(S);            if(a == '{')            {                Pop(S);                flag = true;            }            else            {                flag = false;                break;            }        }    }    if(!IsEmpty(S))        flag = false;}int main(){    char A[maxsize];    while(gets(A))    {        flag = false;        Stack S;        S = CreatStack();        Match(S, A);        if(flag)            cout<<"yes"<<endl;        else            cout<<"no"<<endl;    }    return 0;}
阅读全文
0 0
原创粉丝点击