/*Sample Input sin(20+10) {[}] Sample Output yes no*/ #include <stdio.h> #include <stdlib.h> #include <malloc.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef int status; typedef char elemtype; elemtype str[100]; typedef struct node{ elemtype *base; elemtype *top; int size; }sqstack; status initstack(sqstack &s){//初始化栈 s.base=(elemtype *)malloc(LIST_INIT_SIZE*sizeof(elemtype)); if(!s.base) exit(OVERFLOW); s.top=s.base; s.size=LIST_INIT_SIZE; return OK; } status get_top(sqstack s,elemtype &e){//获得栈顶元素 if(s.top==s.base) return ERROR; e=*(s.top-1); return OK; } status push(sqstack &s,elemtype e){//向栈中输入元素 if(s.top-s.base>=s.size){ s.base=(elemtype *)realloc(s.base,(LIST_INIT_SIZE+LISTINCREMENT)*sizeof(elemtype)); if(!s.base) exit(OVERFLOW); s.top=s.base+s.size; s.size+=LISTINCREMENT; } *s.top++=e; return OK; } status pop(sqstack &s,elemtype &e){//删除栈顶元素 if(s.top==s.base) return ERROR; e=*--s.top; return OK; } status empty(sqstack &s){//判断栈是否为空 if(s.base==s.top) return TRUE; else return FALSE; } int getlenght(char str1[]){ int cnt=0; for(int i=0;str1[i];i++){ cnt++; } return cnt; } int main(){ while(gets(str)){ int len=getlenght(str); sqstack s; initstack(s); elemtype e; int flag=0; for(int i=0;i<len;i++){ if(flag) break; if(str[i]==‘(‘||str[i]==‘{‘||str[i]==‘[‘){ e=str[i]; push(s,e); } else if(str[i]==‘)‘||str[i]==‘}‘||str[i]==‘]‘){ if(empty(s)){ flag=1; break; } pop(s,e); if((str[i]==‘)‘&&e==‘(‘)||(str[i]==‘}‘&&e==‘{‘)||(str[i]==‘]‘&&e==‘[‘)) { continue; } else{ flag=1; break; } } else continue; } if(flag==1||!empty(s)) printf("no\n"); else printf("yes\n"); } return 0; }
时间: 2024-11-01 04:20:05