實現括號匹配演算法

2021-10-05 02:19:08 字數 2581 閱讀 1169

括號匹配問題

假設乙個算術表示式中包含圓括號、方括號和花括號三種型別的括號,編寫乙個函式,用來判別表示式中的括號是否正確配對,並設計乙個測試主函式。

【演算法思想】

在算術表示式中,右括號和左括號匹配的次序正好符合後到的括號要最先被匹配的「後進先出」堆疊操作特點,因此可以借助乙個堆疊來進行判斷。

括號匹配共有以下4種情況:

左、右括號配對次序不正確;

右括號多於左括號;

左括號多於右括號:

左、右括號匹配正確。

具體方法如下:順序掃瞄算術表示式(表現為乙個字串),當遇到3種型別括號的左括號時,讓該括號進棧。當掃瞄到某一種型別的右括號時,比較當前棧頂括號是否與之匹配,若匹配,則退棧繼續進行判斷:若當前棧頂括號與當前掃瞄的括號不相同,則左、右括號配對次序不正確;若字串當前為某種型別右括號而堆疊已空,則右括號多於左括號:字串迴圈掃瞄結束時,若堆枝非空(即堆枝中尚有某種型別左括號),則說明左括號多於右括號;如果未出現

上述3種情況,則說明左、右括號匹配正確。

我定義了新的標頭檔案seqlist.h,再建立c原始檔檔案。

實際操作如下:

①建立seqlist.h標頭檔案

②建立結構體

#ifndef _seqstack_h_

#define _seqstack_h_

#include

#define maxstacksize 100

typedef

struct

seqstack;

③建立順序表

//初始化

void

stackinitiate

(seqstack* s)

//初始化順序堆疊s

intstacknotempty

(seqstack s)

//判斷順序堆疊 s 非空否,非空則返回 1,否則返回 0

//入棧

intstackpush

(seqstack* s, datatype x)

//把資料元素值 x 存入順序堆疊 s 中,入棧成功則返回 1,否則返回 0

else

}//出棧

intstackpop

(seqstack* s, datatype* d)

//取出順序堆疊s的棧頂資料元素值由引數d帶回,出棧成功則返回1,否則返回0

else

}//取棧頂資料元素

intstacktop

(seqstack s, datatype* d)

else

}#endif

// ! _seqstack_h_

主函式,如下:

#include

#include

#define maxstacksize 100

typedef

char datatype;

#include

"seqstack.h"

void

expiscorrect

(char exp,

int n)

elseif(

stacknotempty

(mystack)

&&stacktop

(mystack,

&c)&& c ==

'[')

stackpop

(&mystack,

&c);

else

if(exp[i]

==']'

&&stacknotempty

(mystack)

&&stacktop

(mystack,

&c)&& c !=

'[')

elseif(

stacknotempty

(mystack)

&&stacktop

(mystack,

&c)&& c ==

''&&

stacknotempty

(mystack)

&&stacktop

(mystack,

&c)&& c !=

'elseif(

((exp[i]

==')')||

(exp[i]

==']')||

(exp[i]

=='}'))

&&!stacknotempty

(mystack))}

if(stacknotempty

(mystack)

)printf

("左括號多於右括號!\n");

else

printf

("左右括號匹配正確!\n");

}void

main

(void)

n =strlen

(x);

expiscorrect

(mystack.stack, n)

;return

;}

此方法為我的學習記錄,僅供參考。

括號匹配演算法Java實現

描述 給定乙個字串,其中的字元只包含三種括號 花括號 中括號 圓括號 即它僅由 這六個字元組成。設計演算法,判斷該字串是否有效,即字串中括號是否匹配。括號匹配要求括號必須以正確的順序配對,如 或 等為正確的格式,而 或 或 均為不正確的格式。思路 資料結構選用棧,讀到左括號時入棧,讀到右括號時判斷是...

括號匹配演算法

檢驗括號是否匹配的方法可以用 期待的急迫程度 這個概念來描述。例如,考慮下列括號序列 1 2 3 4 5 6 7 8 當計算機接受了第乙個括號後,它期待著與其匹配的第八個括號的出現,然而等來的卻是第二個括號,此時第乙個括號 只能暫時靠邊,而迫切等待與第二個括號相匹配的 第七個括號 的出現,類似地,因...

括號匹配演算法

題目 有一段字串,包含 和 和 中的一種或者多種,這三種括號出現次序不定,可隨意巢狀。編寫 判斷三種括號是否正確匹配。思路一 棧的思想 括號匹配是運用棧的經典思想。在 演算法中設定乙個空棧,每次讀入乙個括號,若是左括號,則壓入棧中,等到對應的右括號壓棧,若是右括號,能使置於棧頂的最急迫的期待得以消解...