面試題07 用兩個棧實現乙個佇列

2021-08-24 20:36:35 字數 1123 閱讀 9320

題目描述:用兩個棧實現乙個佇列。分別完成在佇列尾部插入結點和在佇列頭部刪除結點的功能。

基本知識:

(1)佇列的操作:

offer:隊尾插入元素,插入失敗返回false。

poll:隊頭取出元素

linkedlist類實現了queue介面,因此我們可以把linkedlist當成queue來用。

(2)實現棧的操作:

push:向棧中壓入元素。

pop:從棧頂彈出元素。

主要思路:

經過兩個棧之後,就是乙個佇列。插入元素在棧1中,當棧2為空時,就從棧1中依次取出全部的元素壓入棧2,取元素是從棧2中取。
public

class

myqueue

//隊尾插入

public

void

add(t item)

//隊頭刪除

public t delete()

}if(!stack2.isempty())

return stack2.pop();

else

return

null;

}}

擴充套件:用兩個佇列實現乙個棧

主要思路:

新push進來的元素總是插入到非空佇列中,空佇列則用來儲存較老的元素,較新的元素則彈出,每pop一次產生乙個空佇列。
**:

public

class

mystack

//向棧中壓入元素。因為兩個佇列至少有乙個是空的,要將元素插入非空佇列中。

public

void

push(t item)

// 彈出棧頂元素,因為要彈出最新的那個,所以返回的是最後插入的那個元素,且每一次pop都會將乙個佇列變空。

public t pop()

return queue1.poll();

}if (!queue2.isempty())

return queue2.poll();

}return

null;

}}

面試題 用兩個佇列實現乙個棧

在做這道題之前,我們首先要搞清楚佇列和棧的特點。佇列 先進先出,即插入資料在隊尾進行,刪除資料在隊頭進行 棧 後進先出,即插入與刪除資料均在棧頂進行。pop 如果我們要實現乙個棧,我們先進入的資料一定是先出去的,怎麼樣利用佇列實現這個特點呢?我們可以利用兩個佇列來進行資料順序的調整。當我們需要刪除資...

面試題8 用兩個棧實現乙個佇列

templateclass cqueue 解答 這題仔細分析下,應該可以做出來。有兩個棧stack1和stack2。那麼,如果stack2為空,我們將stack1 出佇列逆序 的數壓入到stack2 出佇列順序 在對stack2進行出棧。如果stack2非空,直接出棧。實現如下 include in...

面試題 4 用兩個棧實現佇列 用兩個佇列實現棧

首先,我們知道 棧 是先進後出的,佇列 是先進先出的。我們先在 stack1 中插入 a b c d 四個字母。此時,我們如果要做出隊操作的話,a 應該首先被 pop 出來,那麼我們想到,把 stack1 中的所有數 先 pop 出來,那麼 a 就可以出隊了。這時,我們可以利用 stack2 我們將...