棧(stack),是一種線性儲存結構,它有以下幾個特點:
(01) 棧中資料是按照"後進先出(lifo, last in first out)"方式進出棧的。
(02) 向棧中新增/刪除資料時,只能從棧頂進行操作。
棧通常包括的三種操作:push、peek、pop。
push -- 向棧中新增元素。
peek -- 返回棧頂元素。
pop -- 返回並刪除棧頂元素的操作。
c++的stl中本身就包含了stack類,基本上該stack類就能滿足我們的需求,所以很少需要我們自己來實現。本部分介紹2種c++實現。
1. c++實現一:陣列實現的棧,能儲存任意型別的資料。
2. c++實現二:c++的 stl 中自帶的"棧"(stack)的示例。
1. c++實現一:陣列實現的棧,能儲存任意型別的資料
實現**:.h
#ifndef array_stack_hxxview code#define array_stack_hxx#include
#include
"arraystack.h
"using
namespace
std;
template
class
arraystack;
//建立「棧」,預設大小是12
templatearraystack
::arraystack() }//
銷毀「棧」
templatearraystack
::~arraystack() }//
將val新增到棧中
template
void arraystack::push(t t)
//返回「棧頂元素值」
templatet arraystack
::peek()
//返回「棧頂元素值」,並刪除「棧頂元素」
templatet arraystack
::pop()
//返回「棧」的大小
template
int arraystack::size()
//返回「棧」是否為空
template
int arraystack::isempty()
#endif
測試**:.cpp
#include #includeview code"arraystack.h
"using
namespace
std;
intmain()
return0;
}
結果說明:關於"棧的宣告和實現都在標頭檔案中"的原因,是因為棧的實現利用了c++模板,而"c++編譯器不能支援對模板的分離式編譯"。這在"資料結構和演算法01之 線性表"中已經介紹過了。 程式的實現和邏輯都非常簡單。需要說明的是,採用c++模板實現的;但是,預設陣列的大小只有12,而且該實現不支援動態擴充套件。
2. c++實現二:c++的 stl 中自帶的"棧"(stack)的示例
實現**:
#include #includeview codeusing
namespace
std;/**
* c++ 語言: stl 自帶的「棧」(stack)的示例。
* * @author skywang
* @date 2013/11/07 */
intmain ()
return0;
}
C 棧的實現
2009 04 15 11 40 順序棧 seqential stack 就是用順序儲存方式儲存的棧。在下面順序棧的類定義中是用陣列儲存的。用stacka maxsize 儲存,maxsize是最大允許存放元素的個數。變數top表示棧頂部元素的位置,初始值為 1,表示棧空.我們首先給出順序棧的抽象資...
c 棧的實現
棧的實現 供學習c 人員使用 define stack size 10000 巨集定義 include 標頭檔案 using namespace std template struct node 無引數的的建構函式 node elemtypeitem,node link null 已知資料元素值和指...
棧的C 實現
棧的特點是先進後出 lifo 就像一疊盤子一樣,你只能從最上面取。這裡介紹幾個基本的功能 是否為空棧 empty 新增乙個元素 push 取最頂元素 top 彈出乙個元素 pop 輸出棧中的元素 out c 中有棧容器,用到時只需 include即可。這裡,我們自己建立乙個棧類,乙個int型的棧,再...