筆記六 基於陣列的棧的實現

2021-07-11 15:48:09 字數 1768 閱讀 5458

定義:後進先出的資料結構

實現一:基於陣列表示的線性表的派生棧的實現。

原理:把線性表的插入和刪除操作限制在同一端進行,即得到棧的表現形式。

操作:把陣列線性表的右端定義為棧頂。

**:

template

class

stack

; virtual

bool empty() const = 0;

virtual

int size() const = 0;

virtual t& top() = 0;

virtual

void pop() = 0;

virtual

void push(const t& theelement) = 0;

};template

class derivedarraystack : private arraylist, public

stack

bool empty() const

int size() const

t& top()

return arraylist::get(arraylist::size() - 1);

}void pop()

arraylist::erase(arraylist::size() - 1); }

void push(const t& theelement)

};

實現二:不以arraylist作為基類,直接實現陣列型棧

操作:定義乙個指向棧頂的標記stacktop,棧容量標記stacklength和儲存陣列元素的指標。

**:

template

class arraystack : public

stack

bool empty() const

int size() const

t& top();

void pop();

void push(const t& theelement);

private:

int stacktop; //當前棧頂

int arraylength; //棧容量

t* stk; //元素陣列

};template

arraystack::arraystack(int initialcapacity)

template

t& arraystack::top()

return stk[stacktop];

}template

void arraystack::pop()

//t* curr = stk[stacktop];

int deltop = stacktop;

--stacktop;

stk[deltop].~t();

}template

void arraystack::push(const t& theelement)

stk[++stacktop] = theelement;

}

main()函式:

int main(int argc, char *argv)

執行:

基於陣列的棧

1 2 棧是一種遵從後進先出 lifo 原則的有序集合。新新增或待刪除的元素都儲存在棧的同 3一端,稱作棧頂,另一端就叫棧底。在棧裡,新元素都靠近棧頂,舊元素都接近棧底4 5 class stack 8 9 向棧新增元素 push 只新增元素到棧頂,也就是棧的末尾。push 方法可以如下這樣寫。10...

基於陣列實現雙端棧

棧底分別在陣列的兩端,規定陣列大小為128,int型別。可以實現的操作為驗空 驗滿 分別向兩個棧新增元素 分別刪除棧頂元素 分別展示棧內所有元素。如下 include using namespace std typedef int stackelement const int stack capac...

揹包 佇列和棧的實現(基於陣列)

下面介紹揹包 佇列和棧 基於陣列 的實現,是對 演算法 第四版 1.3 節的部分總結。api 是開發的起點,所以先給出 api 表 1 泛型可迭代的基礎集合資料型別的 api 總的思路是先給出乙個簡單而經典的實現,然後討論它的改進並得到表 1 中的 api 的所有實現。從簡單的開始,我們先實現一種表...