您的位置:首页 > 理论基础 > 数据结构算法

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

2017-10-16 21:26 465 查看


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

Time Limit: 1000MS Memory Limit: 65536KB

Submit Statistic


Problem Description

 给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。
 


Input

 输入数据有多组,处理到文件结束。
 


Output

 如果匹配就输出“yes”,不匹配输出“no”
 


Example Input

sin(20+10)
{[}]



Example Output

yes
no



Hint


Author

#include <iostream>

#include<stdio.h>

#include <stdlib.h>

#include <string.h>

using namespace std;

#define maxsize 10000

#define numsize 10000

typedef char element;

typedef int status;

typedef struct

{

    element *top;

    element *base;

    int stacksize;

}sqstack;

status initstack(sqstack &s)

{

    s.base=(element *)malloc(maxsize * sizeof(element));

    if(!s.base)return -1;

    s.top=s.base;

    s.stacksize=maxsize;

    return 0;

}

void clearstack(sqstack &s)

{

    s.top=s.base;

}

void push(sqstack &s,element e)

{

    if(s.top-s.base>=s.stacksize)

    {

        s.base=(element *)realloc(s.base,maxsize+numsize*sizeof(element));

        s.top=s.base+maxsize;

        s.stacksize+=numsize;

    }

    *(s.top)=e;

    s.top++;

}

void pop(sqstack &s)

{

    s.top--;

}

element get(sqstack &s)

{

    element e;

    e=*(s.top-1);

    s.top--;

    return e;

}

status emptystack(sqstack &s)

{

    if(s.base==s.top)

        return 0;

    else

        return 1;

}

void putstack(sqstack &s)

{

    while(s.top>s.base)

    {

        printf("%d",*(s.top-1));

        s.top--;

    }

}

int main()

{

    sqstack s;

    char a[56];

    while(gets(a))

    {

        initstack(s);

        int flag=1;

        int c=strlen(a);

        for(int i=0;i<c;i++)

        {

            if(a[i]=='('||a[i]=='['||a[i]=='{')

                {

                    push(s,a[i]);

                }

            if(a[i]==')')

                {

                    if(*(s.top-1)=='(')

                    {

                        flag=1;

                        s.top--;

                    }

                    else

                    {

                        flag=0;

                        break;

                    }

                }

               if(a[i]==']')

                {

                    if(*(s.top-1)=='[')

                    {

                        flag=1;

                        s.top--;

                    }

                    else

                    {

                        flag=0;

                        break;

                    }

                }

               if(a[i]=='}')

                {

                    if(*(s.top-1)=='{')

                    {

                        flag=1;

                        s.top--;

                    }

                    else

                    {

                        flag=0;

                        break;

                    }

                }

        }

        if(emptystack(s))

            flag=0;

        if(flag==0)

            printf("no\n");

        else

            printf("yes\n");

    }

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: