首先我們定義了乙個棧模板類,它有幾個純虛函式,分別是棧類最常用的幾個函式
push() 將元素放入棧頂
top() 返回棧頂元素值
pop() 彈出棧頂元素
clear() 清空棧(析構函式會用到)
同樣我們定義了判斷棧是否為空函式isempty(),以及保護成員—棧的高度(長度)height;
模板類定義**如下
template
<
class
type
>
class
abstack
virtual
void
push
(type&)=
0;virtual type top()
=0;virtual
bool
pop(type&)=
0;virtual
void
clear()
=0;protected
:unsigned height;
};
陣列棧、鍊錶棧可由該模板派生而來。下面介紹一下陣列棧(也叫順序棧),因為陣列棧比較好寫 。
棧的實現用到了判斷函式assert,標頭檔案要將它引入。
**如下:
//順序棧實現
template
<
class
type
>
class
seqstack
:public abstack
//由抽象模板類派生
~seqstack()
//析構函式
void
push
(type& x)
;//元素入棧
bool
pop(type& x)
;//彈出棧頂元素(以引用形式返回)
type top()
;//返回棧頂元素值
void
clear()
//清棧
seqstack&
copy
(seqstack& s)
;//這裡新增了乙個拷貝函式
seqstack&
operator
=(seqstack& s)
//過載運算子
bool
isfull()
//判斷棧是否已滿,防止上溢
protected
:int top;
//top代表棧頂元素在陣列的下標
type* elements;
//一維陣列指標存放棧中元素
int maxsize;
//棧的最大長度};
template
<
class
type
>
type seqstack
::top()
template
<
class
type
>
seqstack
::seqstack
(int i)
template
<
class
type
>
void seqstack
::push
(type& x)
template
<
class
type
>
bool seqstack
::pop
(type& x)
return
true;}
template
<
class
type
>
seqstack
& seqstack
::copy
(seqstack& s)
這樣乙個順序棧就寫好了,為了測試一下,用一道比較經典的括號匹配問題試一下。
問題描述
假設乙個算術表示式可以包含三種括號:「(」和「)」,方括號「[」和「]」,及花括號「 」,且這三種括號可巢狀使用。試設計演算法判斷給定表示式中所含括號是否配對出現。
測試用例
期待輸出
括號配對
括號不配對
**實現
#include
#include
using
namespace std;
//棧模板
template
<
class
type
>
class
abstack
virtual
void
push
(type&)=
0;virtual type top()
=0;virtual
bool
pop(type&)=
0;virtual
void
clear()
=0;protected
:unsigned height;};
//順序棧實現
template
<
class
type
>
class
seqstack
:public abstack
~seqstack()
void
push
(type& x)
;bool
pop(type& x)
; type top()
;void
clear()
seqstack&
copy
(seqstack& s)
; seqstack&
operator
=(seqstack& s)
bool
isfull()
protected
:int top;
type* elements;
//一維陣列指標存放棧中元素
int maxsize;};
template
<
class
type
>
type seqstack
::top()
template
<
class
type
>
seqstack
::seqstack
(int i)
template
<
class
type
>
void seqstack
::push
(type& x)
template
<
class
type
>
bool seqstack
::pop
(type& x)
return
true;}
template
<
class
type
>
seqstack
& seqstack
::copy
(seqstack& s)
intmain()
else
if(s.
top()!=
'[')
else
}else
if(ch ==
'}')
else
if(s.
top()!=
'else
}else
if(ch ==
')')
else
if(s.
top()!=
'(')
else}}
if(!s.isempty()
) flag =1;
if(flag)
cout <<
"括號不配對"
<< endl;
else
cout <<
"括號配對"
<< endl;
return0;
}
結果不給你們看了,肯定是對的。 C 資料結構之棧 順序棧的實現
停更說明 國慶陪女朋友旅遊去了,並且發生了許多許多有趣的事情,有空再分享哈 這裡該來一條華麗麗的分割線 現在來說說資料結構中的棧,英文中好像是stack,翻譯過來棧其實是很形象的 棧的出口和入口相同,且只有乙個進出口 我們平時通過變數宣告 非new方法 申請來的儲存變數的方法其實就是棧記憶體。特點 ...
C 資料結構 棧之順序棧
棧 stack 是一種只允許在一端進行插入或刪除操作的線性表。棧頂 top 是允許進行插入刪除的一端。棧底 bottom 是固定不允許插入刪除的一端。棧的操作特性概括為後進先出 last in first out,lifo 相關知識 c 結構體 c 指標 c 引用 線性表之順序表 假定線性表的元素型...
資料結構之棧的實現 順序棧 C語言
學習參考 嚴蔚敏 資料結構 c語言版 要點 基本操作 入棧 出棧讀棧頂元素值 建棧棧滿 棧空清空棧 銷毀棧 實現 棧結構定義 typedef struct seqstack,pstack 建棧 int initstack pstack s,int size 棧滿 int stackfull psta...