描述:從鍵盤輸入任意括號序列,程式設計判斷括號是否匹配。假設允許有三種括號:圓括號()、方括號和花括號{},其巢狀的順序隨意。
為了正確檢驗輸入序列的括號匹配問題,要使用棧結構來實現。
(1)在檢驗演算法中建立乙個棧,讀入圓括號、方括號和大括號組成的序列;
(2)若是左括號直接入棧,等待同類的右括號與之匹配;若讀入的是右括號,不入棧,若與當前棧頂的左括號為同類括號,則二者匹配,將棧頂的左括號出棧,否則屬於不合法的情況;
(3)如果序列已讀盡,而棧中仍有待匹配的左括號,或讀入乙個右括號,而棧已空,則均屬不合法情況。
(4)當輸入序列與棧同時變空,則說明所有括號完全匹配。
#include #include #include #define error 0
#define ok 1
#define false -1
#define true 1
#define maxsize 100
typedef struct node
seqstack;
int menu_select();
void initstack(seqstack * s);
int push(seqstack * s, char x);
int pop(seqstack * s, char * x);
int gettop(seqstack * s, char * x);
void introduce();
int isempty(seqstack * s);
int match(char a, char b);
int menu_select() // 選單驅動程式
else
break;
}return sn;}/*
todo: 括號匹配的檢驗
功能描述:利用堆疊技術來檢驗該字串中的括號是否匹配
迴圈逐一掃瞄該字串,判斷字串中的括號是否匹配
若是左括號直接入棧,等待同類的右括號與之匹配;若讀入的是右括號,不入棧,若與當前棧頂的左括號為同類括號,則二者匹配,將棧頂的左括號出棧,
若與當前棧頂的左括號為不同類括號,返回2
如果序列已讀盡,而棧中仍有待匹配的左括號,返回3,讀入乙個右括號,而棧已空,返回1
當輸入序列與棧同時變空,則說明所有括號完全匹配,返回0
引數說明: str為輸入的字串
返回值說明: 括號匹配的結果,0:表示括號匹配,1:表示右括號多餘,2:表示對應的括號不同類,3:表示左括號多餘
*/int bracketmatch(char *str)
')//如果是其他字元,就略過
if((str[i]==')' || str[i]==']' || str[i]=='}') && isempty(compstack) == 1)//如果掃瞄到右括號且棧已空,就返回1
else if(str[i]=='(' || str[i]=='[' || str[i]=='
else if(str[i]==')' || str[i]==']' || str[i]=='}')//如果掃瞄到右括號
'))//棧頂元素對比當前元素,是否配對
else}}
if(isempty(compstack) != 1)//如果棧未空,序列已空,
else//否則,返回0,完全匹配
}void initstack(seqstack * s)
int push(seqstack * s, char x)
int pop(seqstack * s,char * x)
}int gettop(seqstack * s, char * x)
}void introduce()
int isempty(seqstack * s)
int match(char a, char b)
')) return 1;
else
return 0;
}int main()
break;
case 0:
printf(" 再見!\n"); //退出系統
return 0;
} // switch語句結束
} // for迴圈結束
} // main()函式結束
資料結構題目 括號是否匹配
題目 對於給定的簡單算術表示式 只包含 存放在字元陣列expr中,長度為n。從左到右逐個字元掃瞄,利用棧 已提供的棧和基本操作,而且不會出現棧滿的情況 設計乙個括號是否匹配的演算法。個人理解 當掃瞄到 的時候將其入棧,掃瞄到 的時候就將棧中的 彈出,若是棧中還能彈出 則與當前的 匹配。當掃瞄到 但是...
資料結構 括號匹配的檢驗C語言
演算法 遇到普通字元忽略 所有字元掃瞄完畢,棧為空 成功 匹配失敗或掃瞄完畢,但是棧不為空 失敗 created by xuehu96 on 2019 08 09.include include linkstack.h intisleft const char c return ret int is...
資料結構 棧的應用 括號匹配的檢驗
棧的應用 括號匹配的檢驗 演算法內容 以此掃瞄所有字元,遇到左括號入棧,遇到右括號則彈出棧頂元素檢查是否匹配。匹配失敗的情況 1.左括號單 2.右括號單 3.左右括號不匹配 include include define maxsize 10 定義棧中元素的最大個數 typedef struct sq...