一、棧:
特殊的線性表,只能在其一端進行資料插入和刪除操作,
特性:先進後出 fifo
2、模擬實現乙個棧
# include# include# include# include# include//引用前面自己實現的順序表的類的標頭檔案
using namespace std;
//template>
//class t:容器型別 class conainer:底層空間,此時container若是想要給定
//乙個預設的引數,必須例項化的時候需要給定乙個具體的型別,不能直接給乙個
//vector,因為vector是乙個模板類,不是具體的型別,此時只能給成vectortemplateclass container
{};//模板類的名字
//templateclass container>
templateclass container=vector>
//第二個模板引數:模板類。
//templateclass container:模板的模板引數:模板類的引數列表,不需要給出模板類的名字,此時
//是乙個模板的型別而不是模板類,此時的vector也是模板類,此時兩個模板類(container和vector)的引數個數也應該相同
//container是乙個模板類,只接收乙個模板類的引數,而且不用把這個引數給出來
//若是此處給定模板的模板類函式,則後面例項化為物件,也必須給定模板類函式containerclass stack
void push(const t& data)
void pop()
t& top()
const t& top()const
size_t size()const
private:
container _con;//建立乙個容器的物件//container是乙個具體的型別
//container_con;//container是乙個模板類
};void test()
int main()
二、模擬實現乙個佇列
佇列是乙個特殊的線性結構:只有兩種操作:在一端進行資料的插入(隊尾),在另一端進行資料的刪除操作(隊頭)
從隊頭出佇列,從隊尾入佇列
2、封裝乙個佇列
使用模板函式封裝乙個佇列
# include# include# include# include# includeusing namespace std;
//使用模板引數來實現乙個佇列
template>
//依靠底層封裝的list順序表,重新封裝乙個
class queue
void push(const t& data)
void pop()
t& front()
const t& front()const
t& back()
const t& back()const
size_t size()const
bool empty()const
private:
container _con;
};void test()
void push(const t& data)
void pop()
t& front()
const t& front()const
t& back()
const t& back()const
size_t size()const
bool empty()const
private:
container_con;//通過具體的型別定義乙個容器
};void test()
int main()
棧佇列 使用兩個棧實現乙個佇列
棧佇列 使用兩個棧實現乙個佇列 思路 1.入佇列,是將資料放入棧1 2.出佇列,是將棧1資料出棧後依次存入棧2,然後棧2進行出棧 這樣就模擬了佇列的 先進先出 思想1.stack.h pragma once include include include 棧實現 typedef int sdatat...
兩個棧模擬乙個佇列 兩個佇列模擬乙個棧
解題思路 插入操作在stack1中進行,刪除操作在stack2中進行,如果stack2為空,則將stack1中的所有元素轉移到stack2中。include include includeusing namespace std template class cqueue 建構函式 template ...
兩個棧實現乙個佇列 兩個佇列實現乙個棧
這兩個題的思路比較相似。棧的特點是 先進後出 佇列的特點是 先進先出 不要怕!用兩個棧實現乙個佇列很簡單 再將top元素push到stack 2中,然後將stack 1 pop一次直到stack 1剩下最後乙個元素,這個就是最先push進去的,我們把它pop掉就可以了,同理,我們求queue的fro...