用兩個棧來實現乙個佇列,完成佇列的push和pop操作。 佇列中的元素為int型別。
解題思路:首先需要了解棧和佇列兩種結構的性質。
queue是一種」先進先出」的資料結構,他在對尾插入元素,在隊頭刪除元素,他既可以取到自己的隊頭元素,也可以取到自己的隊尾元素;
stack是一種」先進後出」的資料結構,他對元素的插入和刪除都是在棧頂完成的;他不可以取自己棧底的元素;只能去取自己棧頂的元素;
所以將佇列元素儲存到堆疊1時,出來的順序是相反的,為此我們可以再引入乙個棧2,將棧1的資料存入,使得資料再次逆序,由此得到與佇列相同的輸出。
步驟:1、入隊:將新元素push入棧a;
2、出隊:
(1)判斷棧b是否為空;
(2)如果不為空,則將棧a中所有元素依次pop出並push到棧b;
(3)將棧b的棧頂元素pop出;
class solution
int pop() ;
延伸:用兩個佇列實現棧
解題思路:實現棧的插入,刪除,和返回棧頂元素三個方法即可;
(1)插入:每次找不為空的佇列進行插入,這樣就不存在確定的輔助佇列和主佇列之說,兩個佇列交替儲存資料;這樣效率更高;
(2)刪除;每次先找到不為空的佇列,然後將這個佇列當做主佇列,將另乙個輔助佇列,將主佇列的資料依次取隊頭元素插入輔助佇列,直到主佇列剩下乙個元素;然後利用棧的頭刪功能將次元素刪除;o(n)
(3)返回棧頂元素:那個佇列不為空,就取那個佇列的隊尾返回;這就是棧的棧頂元素。
//用兩個佇列實現棧
class stack
else if(!q1.empty())//q1不為空,q2為空
else//q1為空,q2不為空
void pop()//刪除
q1.pop();//q1中留下乙個刪除
}else
//q2不為空,q1為空
q2.pop();//q2中留下乙個刪除
}private:
//兩個佇列成員
queueq1;
queueq2;
};
劍指offer 用兩個棧實現佇列
華電北風吹 天津大學認知計算與應用重點實驗室 日期 2015 9 30 題目描述 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。解析 我的思路是用乙個棧來儲存資料,入隊的話直接在這個棧上入棧,出隊的話借助輔助棧,對輔助棧入棧,然後取出頭元素,然後把輔助棧上的元素在...
用兩個棧實現佇列《劍指offer
題目描述 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。解題思路 將元素入隊時壓入乙個棧中,隨後通過另乙個棧出隊 1 使用stack容器定義兩個棧 stack stack1 stack stack2 2 入隊 stack1.push node node為入隊元素 ...
劍指offer 用兩個棧實現佇列
記錄 劍指offer 上的演算法題。題目描述如下 佇列的宣告如下 template class cqueue cqueue t deletehead bool empty private stack stack1 stack stack2 實現的 如下 templatet stack1.push n...