題目描述:用兩個棧實現乙個佇列。分別完成在佇列尾部插入結點和在佇列頭部刪除結點的功能。
基本知識:
(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 我們將...