数据结构实验之栈与队列四:括号匹配
Problem Description
给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。
Input
输入数据有多组,处理到文件结束。
Output
如果匹配就输出“yes”,不匹配输出“no”
Example Input
sin(20+10) {[}]
Example Output
yes no
------------------------------------------------------------------------------------------------------------------------------
#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 0 typedef struct{ elemtype *base; elemtype *top; int stacksize; }Sqstack; status isEmpty(Sqstack &S){ if(S.top == S.base) return true; else return false; } elemtype getTop(Sqstack &S){ if(S.base == S.top) return false; else return *(S.top-1); } void initStack(Sqstack &S){ S.base = new elemtype[MAXSIZE]; S.top = S.base; S.stacksize = MAXSIZE; } 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; } elemtype Pop(Sqstack &S, elemtype &e){ if(S.top == S.base) return false; return e = *--S.top; } int LineEdit(Sqstack &S, char str[]){ int flag; for(int i=0;str[i] != '\0';i++){ if(str[i] == '(' || str[i] == '[' || str[i] == '{'){ 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 string[123]; while(gets(string)){ Sqstack S; initStack(S); int flag = LineEdit(S, string); if(flag == true){ printf("yes\n"); } else{ printf("no\n"); } } return 0; }