簡單演算法 使用棧實現括號匹配檢驗

2021-08-09 07:09:03 字數 1190 閱讀 5873

設計乙個演算法判定乙個算術表示式中的括號是否正確配對(包括三種括號並且需要考慮大中小三種括號的巢狀順序), 並將對應的程式除錯執行通過。

演算法思想:

暫不考慮資料元素的運算,只考慮括號的配對。則有兩個概念:對右括號期待的急迫程度和當前括號的優先順序。因此前者的特點符合棧的特點,即後遍歷到的括號,急迫程度越強。因此使用乙個棧來儲存遍歷到的括號,遇到左括號則入棧,遇到右括號,如果匹配當前左括號則出棧,如果不匹配則跳出報錯,如果出現了有右括號無左括號或遍歷完成不是空棧的情況,則跳出報錯。

第二個概念則使用乙個變數來表示優先順序,每做一次入棧或出棧的操作,則檢查一下當前棧頂元素的優先順序來確定當前括號的優先順序,如果入棧的左括號優先順序低於當前等級,則跳出報錯。

c語言**實現:

//使用棧實現括號的匹配 

#include

#include

#include

//定義乙個棧

typedef

struct stackstack,*pstack;

void initstack(pstack x,int s)

int judgeempty(pstack x)

int judgefilled(pstack x)

int push(pstack x,char in)

int pop(pstack x)

int bracketmatch(char *x)

break;

case

']':

if(judgeempty(stack)==1||*(stack->top-1)!='[')

return

0; pop(stack);

switch(*stack->top-1)

break;

case

'}':

if(judgeempty(stack)==1||*(stack->top-1)!='

break;

default:

printf("o\n");

break;

}i++;

}if(judgeempty(stack)==0)

return

0; free(stack);

return1;}

int main()

括號匹配的檢驗(棧)

include using namespace std include include define ture 1 define false 0 define ok 1 define error 0 define overflow 2 typedef int status typedef char ...

棧的應用 括號匹配檢驗

輸入包含括號的表示式,包含3中括號 圓括號 方括號,大括號 其巢狀順序隨意,即 或 等均為正確的輸入格式,檢驗輸入表示式中的括號是否匹配。源 bracketmatch.h ifndef bracketmatch h define bracketmatch h define maxsize 100 t...

棧的運用(括號匹配檢驗)

8586 括號匹配檢驗 時間限制 1000ms 長度限制 10kb 提交次數 4447 通過次數 1864 題型 程式設計題 語言 g gcc description 利用棧編寫滿足下列要求的括號匹配檢驗程式 假設表示式中允許包含兩種括號 圓括號和方括號,其巢狀的順序隨意,即 或 等為正確的格式,或...