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