設計一個演算法判別一個算術表示式的圓括號是否正確配對
阿新 • • 發佈:2018-11-10
設計一個演算法判別一個算術表示式的圓括號是否正確配對。
樣例輸入:
(7+8)*10+(
樣例輸出:
0 \\不匹配
輸入:
(7+8)*10
輸出:
1 \\匹配
輸入輸出樣例:1組
#1
- 樣例輸入:
(7+8)*10+(
- 樣例輸出:
0
#include <stdio.h> #include <stdlib.h> #define max 100 typedef struct sta { char data[max]; int top; } stack; stack* init()//棧初始化 { stack *s=(stack*)malloc(sizeof(stack)); s->top=-1; return s; } int empty(stack *s)//判斷是否空棧 { if(s->top==-1) return 1; else return 0; } int push(stack* s,char x)//壓棧 { if(s->top==max-1) return -1;//若棧已滿,則返回 else { s->top++; s->data[s->top]=x; return 1; } } int pop(stack* s,char *x)//出棧 { if(empty(s)) return 0; else { *x=s->data[s->top]; s->top--; return 1; } } int result() { char x;int flag=1,flag1=1;//看是否能合適的入棧和出棧 stack *s=init(); //scanf("%c",&x); //getchar();//消除輸入一個換行字元的影響, //while((x!='\n')zhe //這裡會導致超時,x!='\n'這個條件一直都滿足,跳不出迴圈,因為輸入檔案末尾根本就沒有回車符,而在codeblock中輸入完資料後會手動敲一個回車符,一個陷入死迴圈一個能正常結束,EOF是檔案結束標誌 while((x=getchar())!=EOF)//如果是'('則壓棧,')'則出棧 { if(x=='(') flag=push(s,x); if(x==')') flag1=pop(s,&x); } if(empty(s)&&flag==1&&flag1==1) return 1;//遍歷完後棧中無括號則匹配正確 else return -1; } int main() { int flag; flag=result(); if(flag==1) printf("1"); else printf("0"); return 0; }