資料結構括號匹配問題
資料結構括號匹配問題
要求大、中、小括號兩兩匹配,基本思路可以通過棧來實現。這裡我使用的是簡單的靜態順序棧,大小固定,同時定義了棧頂指標top。程式包含了棧的幾個最基本的操作,初始化、判空、壓入、彈出,此外還有一個匹配函式,該函式接受一個陣列和其長度做引數,判斷是否括號匹配成功。然後是處理括號的問題,思路是掃描陣列中的括號,遇到左括號就進行壓棧操作,遇到右括號先判斷棧中是否還有元素(即左括號),若沒有則右括號“單身”,匹配失敗,若棧中存在元素,就進行出棧操作,將棧頂的元素彈出與右括號進行配對,判斷是否成功,在掃描完所有的括號後,判斷棧中是否還有元素,若有,則左括號“單身”,匹配失敗,若棧空,則最終匹配成功,結束程式。
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define TRUE 1
#define FALSE 0
#define ERROR 0
#define OVERFLOW -1
#define MAXSIZE 20
typedef struct {
char data[MAXSIZE];
int top;
}SqStack;
typedef int Status;
Status InitStack(SqStack* S) {
//構造一個空棧
S->top = -1;
return OK;
}
Status StackEmpty(SqStack S) {
if (S.top == -1) { printf("\n棧空!\n");return TRUE; }
else { return FALSE; }
}
Status Push(SqStack* S,char str) {
if (S->top==MAXSIZE-1) {
printf("\n棧滿!\n");
exit(OVERFLOW);
}
S->data[++S->top] = str;
printf("\n壓入元素%c\n", str);
return OK;
}
Status Pop(SqStack* S, char* str) {
if (S->top == -1) {
printf("\n棧空!\n");
return ERROR;
}
*str = S->data[S->top--];
printf("\n彈出元素%c\n", *str);
return OK;
}
Status Check(char str[], int length) {
SqStack S;
InitStack(&S);
printf("\n成功!\n");
for (int i = 0;i < length;i++) {
if (str[i] == '(' || str[i] == '[' || str[i] == '{') {
Push(&S, str[i]);//掃描到左括號,入棧
} else {
if (StackEmpty(S)) {
printf("\n匹配失敗\n");
return FALSE;
}
char topelem = '\0';
Pop(&S, &topelem);
if (str[i] == ')' && topelem != '(')
{
printf("\n匹配失敗\n");
return FALSE;
}
if (str[i] == ']' && topelem != '[')
{
printf("\n匹配失敗\n");
return FALSE;
}
if (str[i] == '}' && topelem != '{')
{
printf("\n匹配失敗\n");
return FALSE;
}
}
}
if (StackEmpty(S)) { printf("\n匹配成功\n");return OK; }
else {
printf("\n匹配失敗\n");
return FALSE;
}
return OK;
}
void main() {
printf("\n請向棧中寫入括號(輸入“#”結束輸入):\n");
int temp = 0;
char string[MAXSIZE] = { '\0' };
for (int i = 0;;i++) {
scanf_s("%c", &string[i],sizeof(string));
if (string[i] == '#')break;
temp++;
}
Check(string, temp);
}
C語言實現
相關文章
- LeetCode 3: PairsOfParentheses (括號匹配問題)LeetCodeAI
- 括號匹配的檢驗問題(C++)C++
- 【棧】括號匹配
- 最長有效括號的問題
- HDU 5831 Rikka with Parenthesis II (括號匹配)
- 棧和括號匹配,一文搞懂
- Shell 括號總結
- 【題解】括號序列
- 03.Java資料結構問題Java資料結構
- 資料結構——RMQ(ST表)問題資料結構MQ
- 【資料結構】停車場問題資料結構
- sqlserver查詢長括號[資料SQLServer
- 每日一題: 有效括號每日一題
- 【資料結構與演算法】字串匹配資料結構演算法字串匹配
- 正規表示式(匹配第一個花括號)
- 資料結構初階--堆排序+TOPK問題資料結構排序TopK
- 【dawn·資料結構】迷宮問題(C++)資料結構C++
- 理解正規表示式中的括號 (),方括號 [] 和大括號 {}
- [20190930]關於資料結構設計問題.txt資料結構
- leetcode演算法資料結構題解---資料結構LeetCode演算法資料結構
- 【資料結構與演算法】揹包問題總結梳理資料結構演算法
- 用Python解決資料結構與演算法問題(三):線性資料結構之棧Python資料結構演算法
- (C++)資料結構實驗二——迷宮問題C++資料結構
- 資料結構和演算法面試題系列—揹包問題總結資料結構演算法面試題
- 【整理】資料結構——題目資料結構
- 資料結構簡單題資料結構
- 第七章 遞迴、DFS、剪枝、回溯等問題 ------------- 7.5 “逐步生成結果”之非數值型問題 (合法括號)遞迴
- P3215 括號修復 題解
- 洛谷題單指南-數學基礎問題-P2651 新增括號III
- 結構體問題結構體
- js 中基礎資料結構陣列去重問題JS資料結構陣列
- Linux Shell中各種括號用法總結!Linux
- 【資料結構與演算法】字串匹配(字尾陣列)資料結構演算法字串匹配陣列
- 資料結構連結串列筆試題資料結構筆試
- 資料結構面試100題資料結構面試
- 資料結構演算法題資料結構演算法
- 資料結構專題練習資料結構
- [做題筆記] 資料結構筆記資料結構