1. 程式人生 > >設計一個演算法判別一個算術表示式的圓括號是否正確配對

設計一個演算法判別一個算術表示式的圓括號是否正確配對

設計一個演算法判別一個算術表示式的圓括號是否正確配對。

 

樣例輸入:

(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;
}