天天看點

資料結構——用順序棧實作括号比對

CSDN的朋友們,你們好哇哈哈哈哈哈哈哈,我好久沒有更新啦!!!

大家猜猜我這段時間都去幹啥了哇!沒錯,去參加學校的生産實習啦歪!每天自己PUA自己寫代碼:你這麼菜,還不認真敲代碼?(狗頭)

一開始死命的糾結到底水一水實訓還是認真搞哇!!最後還是選擇踏踏實實搞實訓得了,然後剛開始還一邊擔心15天沒有複習考研的内容啊啊啊啊啊啊!實訓每天都忙不過來,但是但是但是第一次寫大型項目餓了麼外賣還是挺挺挺多收獲的喔!雖然使用c/c++開發基于MFC對話框使用socket實作伺服器端與多用戶端商家端通信!現在好多公司都使用QT!

剛開始一直糾結抱怨,昨天結訓典禮我獲得了唯一一個“優秀個人”獎,還是好開心哈哈哈哈哈,我怎麼費事!善變的女孩哇哇哇哇哇!

下面言歸正傳咯,接着上次的啦!

用順序棧實作括号比對~

順序棧的代碼是使用的上次我寫的代碼!大家也可以自己把所有的重要的資料結構的代碼寫出來儲存起來,到時候就可以拿出來直接用啦~

然後這個地方我使用了函數封裝起來這一項功能,這樣在主函數就可以直接調用啦~

主要了解的突破點就是:如果比對不成功,那麼就是三種情況!①左括号單身;②右括号單身;③左右括号不比對!

然後說來奇怪,寫完這個,今天中午午睡還夢見我有男朋友了,給我吓醒了哈哈哈,瞬間不想睡午覺了!專心搞事業的🆒!

上代碼咯,有什麼錯誤大家也可以指出來一起交流哇!

//使用順序棧實作括号比對

/*頭檔案*/
#include<stdio.h>
#include<string.h>

/*常量定義*/
#define MaxSize 50  //定義棧中元素最大個數
#define TRUE 1
#define FALSE 0

/*存儲結構類型(順序棧)定義*/
typedef char ElemType;
typedef struct  //靜态存儲配置設定
{
    ElemType data[MaxSize];  //存放棧中元素
    int top;                 //棧頂指針
}SqStack;

/*基本操作自定義函數說明*/
int InitStack(SqStack *S);  //初始化一個空棧
int StackEmpty(SqStack S);   //判斷一個棧是否為空
int Push(SqStack *S,ElemType e);  //進棧
int Pop(SqStack *S,ElemType *e);   //出棧

/*自定義函數聲明*/
int BracketCheck(char bracket[],int length);

/*主函數*/
int main()
{

    char bracket[50]={0};   //'\0'
    int flag;

    printf("請輸入一行英文括号允許包含()[]{}:\n");
    gets(bracket);
    //puts(bracket);

    flag=BracketCheck(bracket,strlen(bracket));

    if(flag==TRUE)
        printf("\n括号比對成功!\n");
    else printf("\n括号比對失敗!\n");

    return 0;
}

/*基本操作自定義函數定義*/
int InitStack(SqStack *S)
{
    (*S).top=-1;
    return TRUE;
}

int StackEmpty(SqStack S)
{
    if(S.top==-1)
        return TRUE;
    return FALSE;
}

int Push(SqStack *S,ElemType e)
{
    if((*S).top==MaxSize-1)  //棧滿
    return FALSE;

    (*S).data[++(*S).top]=e;   //區分S.top初始值設為-1(棧頂指針指向目前棧頂元素)和0(棧頂指針指向目前棧頂元素的下一個)

    return TRUE;
}

int Pop(SqStack *S,ElemType *e)
{
    if((*S).top==-1) //棧空
    return FALSE;

    *e=(*S).data[(*S).top--];

    return TRUE;
}

/*自定義函數實作*/
int BracketCheck(char bracket[],int length)
{
    SqStack S;
    InitStack(&S);
    char ch;
    int i;

    for(i=0;i<length;i++)
    {
        if(bracket[i]=='('||bracket[i]=='{'||bracket[i]=='[')
            Push(&S,bracket[i]);     //左括号入棧
        else
        {
            if(StackEmpty(S))   //如果遇到右括号但是棧空則右括号單身
                return FALSE;

            Pop(&S,&ch);    //彈出棧頂元素

            if(bracket[i]==')'&&ch!='(')   //左括号右括号不比對
                return FALSE;
            if(bracket[i]=='}'&&ch!='{')
                return FALSE;
            if(bracket[i]==']'&&ch!='[')
                return FALSE;
        }
    }

    if(StackEmpty(S))   //結束後判斷左括号是否單身
        return TRUE;
    else return FALSE;

}

           
資料結構——用順序棧實作括号比對