用c語言實現括號匹配算法

/*括號匹配算法*/
#include<stdio.h>
#define FALSE 0
#define TRUE 1
#define MAXSIZE 100
typedef char DataType;
//定義棧
typedef struct stack{
    DataType data[MAXSIZE];
    int top;
}SeqStack;
//初始化棧
void InitStack(SeqStack *s)
{
    s->top = -1;
}
//判斷棧是否爲空
int IsEmpty(SeqStack *s)
{
    if(s->top == -1)
        return TRUE;
    return FALSE;
}
//判斷棧是否已滿
int IsFull(SeqStack *s)
{
    if(s->top == MAXSIZE-1)
        return TRUE;
    return FALSE;
}
//出棧
void PopStack(SeqStack *s, DataType temp)
{
    if(IsEmpty(s))
        return;
    temp = s->data[s->top];
    s->top --;
}
//壓棧
void PushStack(SeqStack *s,DataType temp)
{
    if(IsFull(s))
        return;
    s->top ++ ;
    s->data[s->top]=temp;
}
//判斷兩個括號是否匹配
int Match(char chone,char chtwo)
{
    if(chone=='(' && chtwo==')')
        return TRUE;
    else if(chone == '{' && chtwo == '}')
        return TRUE;
    else if(chone == '[' && chtwo == ']')
        return TRUE;
    else
        return FALSE;
}
//取棧頂元素
void GetTopStack(SeqStack *s , DataType *temp)
{
    if(IsEmpty(s))
        return;
    *temp = s->data[s->top];
}
void BracketMatch(char *str)
{
    SeqStack s;
    int i;
    char ch;
    InitStack(&s);
    for(i=0 ; str[i]!='\0';i++ )
    {
        switch(str[i]){
        case '(':
        case '[':
        case '{':
            PushStack(&s,str[i]);
            break;
        case ')':
        case ']':
        case '}':
            if(IsEmpty(&s))
            {
                printf("右括號多餘\n");
                return;
            }else{
                GetTopStack(&s,&ch);
                if(Match(ch,str[i]))
                    PopStack(&s,ch);
                else{
                    printf("\n對應的右括號不同類\n");
                    return;
                }/*if*/
            }/*else*/
        }/*for*/
    }/*switch*/
    if(IsEmpty(&s))
        printf("\n括號匹配\n");
    else
        printf("\n左括號多餘\n");
}
int main()
{
    char str[MAXSIZE];
    int i;
    printf("Input the bracket string: \n");
    scanf("%s",str);
    BracketMatch(str);
    return 1;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章