劍指offer 用兩個堆疊實現佇列

2021-08-25 05:29:38 字數 1110 閱讀 3636

用兩個棧來實現乙個佇列,完成佇列的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...