C語言中利用棧檢測括號是否匹配

2021-07-31 12:18:26 字數 1897 閱讀 8451

檢測括號是否匹配的演算法中,棧的特性是最符合括號特點的。棧的先進後出將括號的匹配正好完美實現。

思想:從字串開頭向後逐個檢測,檢測到除括號外的元素就跳過。檢測到左括號時,就進行入棧操作,繼續向後檢測。檢測到有括號時,就檢查棧頂元素是否是匹配的左括號。若不匹配,則直接返回錯誤訊號,使程式結束;若匹配,進行出棧操作,繼續向後檢測。結束時,要判斷棧是否為空,若不為空,則括號不匹配;若為空,則括號匹配。

**:

#include #include #include #define	 sta_size	50//棧的大小

#define buf_size 50//輸入字串的大小

//棧的宣告

struct stack;

//判斷棧是否為空

int if_empty(struct stack* psta)

判斷棧是否為滿

int if_full(struct stack* psta)

//初始化棧

void init_stack(struct stack* psta)

//入棧操作

int push_stack(struct stack* psta, char data)

(psta->top)++;

psta->sta[psta->top] = data;

}

//出棧操作

char pop_stack(struct stack* psta)

char tmp = psta->sta[psta->top];

(psta->top)--;

return tmp;

}

//檢視棧頂元素

char get_top_data(struct stack* psta)

char tmp = psta->sta[psta->top];

return tmp;

}

//括號匹配函式

int bracket_match(struct stack* sta, char* string)

else

goto err;

case '}':

if (' else

goto err;

case ']':

if ('[' == (get_top_data(sta))) else

goto err;

case '>':

if ('

goto err;

default:

break;

} ps++;

} if(if_empty(sta) == 0)

ok: return 0;

else

err:

return 1;

}int main(int argc, char* argv)

; // char* buf = "he()jfkdjs";

printf("請輸入要檢測的不超過50個字元的字串:\n");

fgets(buf, buf_size, stdin);

int ret = bracket_match(&sta, buf);

if(ret == 0)

printf("括號檢測匹配... \n");

else

printf("括號檢測不匹配... \n");

return 0;

}

結果:

利用棧判斷括號是否匹配

輸入格式如下 3 輸出格式如下 yes no yes 演算法描述 利用棧來判斷 注意出棧時,考慮棧是否為空 最後匹配的結果應該是棧為空 1 從左到右進行掃瞄字元 2 若為左括號 else public boolean isbalanced string str elseelseelse end fo...

c語言 括號匹配檢測(棧的應用)

括號匹配檢測,對於一串帶括號的字元 1.如果是左括號,入棧 2.如果是右括號,與棧頂元素比較,若形成括號對,則棧頂左括號出棧 若不能形成括號對,則括號不能匹配 include include define init size 6 初始棧空間 define incre size 2 佔空間增量 棧結構...

C 括號匹配檢測(用棧)

輸入一串括號,包括圓括號和方括號,判斷是否匹配,即 或 為匹配的正確的格式,或 為不匹配的格式。1 include2 include 3 include4 using namespace std 5int main 623 else 24goto breakloop 25case if s.empt...