棧的應用 圓括號的匹配檢驗

2022-05-05 23:57:14 字數 1264 閱讀 1187

本次引入類模板來描述棧,關於類模板的定義請參看另一文章:

對於輸入的乙個算術表示式字串,請用一演算法判斷其中圓括號是否匹配,若匹配則返回true,否則返回false。

本題可用棧的操作來實現:用一外迴圈來讀入表示式中的字元,如遇左括號「(」就進棧;遇到右括號「)」就判斷棧是否為空:若棧為空(說明之前沒有「(」進棧,顯然不匹配),返回false,否則退棧(說明「(」「)」是成對出現的,如果最後棧為空,那麼說明圓括號是匹配的)。迴圈結束後再判斷棧是否為空,若棧空則說明括號匹配,否則不匹配。

以下為完整**:

#include

#include

using

namespace

std;

/*棧的類模板宣告*/

template

class seqstack

bool isempty();

bool isfull();

t get_top();

void push(t x);

void pop(t& x);

private:

int top;

int stacksize;

t* stack; //棧元素指標,用來分配動態儲存空間

};/*棧的實現*/

template

seqstack::seqstack(int maxstacksize)

template

bool seqstack::isempty()

template

bool seqstack::isfull()

template

t seqstack::get_top()

return

stack[top];

}template

void seqstack::push(t x)

template

void seqstack::pop(t& x) //刪除棧頂元素,值存入x中

bool judgeexpr()

ch = getchar();

}if(s.isempty())

return

true;

else

return

false;

}int main()

cout

cout

4+5*((5*2)+3

04+5*((5*2)+3)

1

棧的應用 括號匹配檢驗

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

棧的應用之括號匹配檢驗

棧結構具有後進先出的固有特性,在程式設計中很有幫助。這裡舉乙個例子,將棧應用與括號匹配的檢驗。假設表示式中允許三種括號 小括號 中括號和大括號,巢狀的順序任意。等均為正確格式。檢驗括號是否匹配可用 期待的急迫程度 來描述。接收乙個正括號後,計算機期待著乙個與之匹配的反括號。如果此時接收到乙個反括號,...

括號匹配的檢驗(棧)

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 ...