本次引入類模板來描述棧,關於類模板的定義請參看另一文章:
對於輸入的乙個算術表示式字串,請用一演算法判斷其中圓括號是否匹配,若匹配則返回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 ...