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

来源:互联网 发布:驱蚊子软件 编辑:程序博客网 时间:2024/06/15 05:17

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

Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic

Problem Description

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

 

Input

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

 

Output

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

 

Example Input

sin(20+10){[}]

Example Output

yesno
遇到左括号入栈,遇到右括号和栈顶比较,如果不匹配则不匹配,直接break;如果出现右括号的时候当前栈已经是空的,那么就不匹配;如果栈不空,但是没有别的括号再和栈中的元素匹配,那么也不匹配。/***************************本题比较容易忽略的一点************************/题目中说中间可能会有空格,所以读入字符串的时候用gets();
#include <stdio.h>#include <stdlib.h>typedef char elemtype;typedef int status;#define MAXSIZE 100#define OVERFLOW -2#define another 50#define true 1#define false 0typedef struct {elemtype *base;elemtype *top;int stacksize;}Sqstack;status isEmpty(Sqstack &S){if(S.top == S.base)return true;elsereturn false;}void initStack(Sqstack &S){S.base = new elemtype[MAXSIZE];S.top = S.base;S.stacksize = MAXSIZE;}elemtype getTop(Sqstack &S){if(S.base == S.top)return false;elsereturn *(S.top-1);}void Push(Sqstack &S, elemtype e){      //压栈if(S.top-S.base >= S.stacksize){S.base = (elemtype *)realloc(S.base,(another+S.stacksize)*sizeof(elemtype));S.top = S.base + S.stacksize;S.stacksize += another;}*S.top++ = e;}int Pop(Sqstack &S, elemtype &e){if(S.top == S.base) return false;return e = * --S.top;}int match(Sqstack &S, char str[]){int flag;for(int i = 0; str[i] != '\0'; i++){if(str[i] == '('||str[i] == '{'||str[i] == '['){flag = true;Push(S, str[i]);}else if(str[i] == ')'){if(isEmpty(S)){    flag = false;    break;            }char c = getTop(S);if(c == '('){Pop(S, c);flag = true;}else {flag = false;break;}}else if(str[i] == ']'){if(isEmpty(S)){    flag = false;    break;            }char c = getTop(S);if(c == '['){Pop(S, c);flag = true;}else {flag = false;break;}}else if(str[i] == '}'){if(isEmpty(S)){    flag = false;    break;            }char c = getTop(S);if(c == '{'){Pop(S, c);flag = true;}else {flag = false;break;}}}if(!isEmpty(S))flag = false;return flag;}int main(){char str[55];while(gets(str)){Sqstack S;initStack(S);int flag = match(S, str);if(flag == true)printf("yes\n");elseprintf("no\n");}return 0;}


阅读全文
0 0
原创粉丝点击