PTA-括號問題

括號問題

做者: 李廷元
單位: 中國民用航空飛行學院
時間限制: 400 ms
內存限制: 64 MB
代碼長度限制: 16 KB編程

問題描述

給定一串字符,不超過100個字符,可能包括括號、數字、字母、標點符號、空格,編程檢查>這一串字符中的( ) ,[ ],{ }是否匹配。函數

輸入格式:

輸入在一行中給出一行字符串,不超過100個字符,可能包括括號、數字、字母、標點符號、空格。code

輸出格式:

若是括號配對,輸出yes,不然輸出no。內存

輸入樣例1:

sin(10+20)字符串

輸出樣例1:

yesget

輸入樣例2:

{[}]io

輸出樣例2:

no

代碼

#include<stdio.h>
#include<stdlib.h>
#define Maxsize 100

typedef struct SNode* Stack;
struct SNode {
    char data[Maxsize];
    int Top;
};

Stack create ();
int Push (Stack S, char x);
char Pop (Stack S);

int main ()
{
    char str[101];
    Stack S = create ();
    int i = 0, flag = 1;
    gets(str);
    while(str[i] != '\0')
    {
        if(str[i] == '(' || str[i] == '[' || str[i] == '{')
            Push(S, str[i]);
        else if(str[i] == ')' || str[i] == ']' || str[i] == '}')
        {
            if(S->Top == -1)
            {
                flag = 0;
                printf("no\n");
                break;
            }
            if(str[i] == ')')
            {
                if(S->Top == -1 || S->data[S->Top] != '(')
                {
                    flag = 0;
                    printf("no\n");
                    break;
                }
                else Pop(S);
            }
            if(str[i] == ']')
            {
                if(S->Top == -1 || S->data[S->Top] != '[')
                {
                    flag = 0;
                    printf("no\n");
                    break;
                }
                else Pop(S);
            }
            if(str[i] == '}')
            {
                if(S->Top == -1 || S->data[S->Top] != '{')
                {
                    flag = 0;
                    printf("no\n");
                    break;
                }
                else Pop(S);
            }
        }
        i++;
    }
    
    if(flag != 0)
    {
        if(S->Top == -1)
            printf("yes\n");
        else
            printf("no\n");
    }
    
    return 0;
}
Stack create ()
{
    Stack S = (Stack)malloc(sizeof(struct SNode));
    S->Top = -1;
    
    return S;
}
int Push (Stack S, char x)
{
    if(S->Top == 99)
    {
        printf("Stack Full\n");
        return -1;
    }
    else
    {
        S->data[++(S->Top)] = x;
        return 1;
    }
}
char Pop (Stack S)
{
    if(S->Top == -1)
    {
        printf("Stack Empty\n");
        return -1;
    }
    else
        return (S->data[(S->Top)--]);
}

一開始是使用的while((ch = getchar()) != '\n')來讀取字符,結果一直超時,我的認爲多是由於調用getchar函數次數過多。di

相關文章
相關標籤/搜索