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

来源:互联网 发布:注册淘宝号 编辑:程序博客网 时间:2024/06/01 20:08

Problem Description

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

 

Input

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

 

Output

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

 

Example Input

sin(20+10){[}]

Example Output

yesno

code:

#include<stdio.h>#include<stdlib.h>#include<string.h>#define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define OVERLOAD -2#define ERROR 0#define OK 1typedef char ElemType;typedef struct {    ElemType *base;    ElemType *top;    int stacksize;}Sqstack;void InitStack(Sqstack &s)//初始化栈{    s.base = (ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));    if(!s.base)    {        exit(OVERLOAD);    }    s.top = s.base;    s.stacksize = STACK_INIT_SIZE;}int GetTop(Sqstack s, ElemType &e){    if(s.top == s.base) return ERROR;    e = *(s.top-1);    return OK;}void Push(Sqstack &s, ElemType e)//入栈{    if(s.top-s.base>=s.stacksize)    {        s.base = (ElemType*)realloc(s.base, (s.stacksize+STACKINCREMENT)*sizeof(ElemType));        if(!s.base) exit(OVERLOAD);        s.top = s.base+s.stacksize;        s.stacksize+=STACKINCREMENT;    }    *s.top++ = e;}int Pop(Sqstack &s, ElemType &e)//出栈,并将元素赋给e{    if(s.top == s.base) return ERROR;    e = *--s.top;    return OK;}int main(){    Sqstack li;    InitStack(li);    char s[55];    int i;    char e;    while(gets(s))    {        InitStack(li);        int flag = 1;        for(i = 0;i<strlen(s);i++)        {            if(s[i] == '('||s[i] == '['||s[i] == '{')            {                Push(li, s[i]);            }            else if(s[i] == ')'||s[i] == ']'||s[i] == '}')            {                if (GetTop(li, e) == ERROR)                {                    flag = 0;                    break;                }                if(e==s[i]-1||e==s[i]-2)                {                    Pop(li, e);                }                else                 {                    flag = 0;                    break;                }            }        }        if(GetTop(li, e)!=ERROR) flag = 0;        if(flag) printf("yes\n");        else printf("no\n");    }}


原创粉丝点击