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

2021-06-15 08:24:01 字數 1008 閱讀 6100

題目:用兩個佇列實現乙個棧。實現兩個函式push和pop,完成從棧頂插入和刪除結點的功能。

思路:

(1)入棧:總是插入到非空佇列

(2)出棧:將非空佇列中的前n-1個元素依次出佇列push進空佇列中,然後將最後乙個元素出佇列,完成出棧操作。

c++**:

#include "stdafx.h"

#include #include #include using namespace std;

// 兩個佇列實現乙個棧

templateclass cstack

~cstack() {}

void pushdata(const t& element);

void popdata(t& element);

private:

dequem_queue1;

dequem_queue2;

};templatevoid cstack::pushdata(const t& element)

else if (m_queue2.size() > 0)

else }

templatevoid cstack::popdata(t& element)

assert(m_queue2.size() == 1); //確保佇列2內有乙個元素

element = m_queue2.front();

m_queue2.pop_front();

} else if (m_queue2.size() == 0)

assert(m_queue1.size() == 1); //確保佇列1內有乙個元素

element = m_queue1.front();

m_queue1.pop_front(); }}

int main()

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

template class cqueue 在上述佇列的宣告中可以看出,乙個佇列包含了兩個棧stack1和stack2,因此這道題的意圖是要求我們操作這兩個 先進後出 的棧實現乙個 先進先出 的佇列cqueue。我們通過乙個具體的例子來分析往該佇列插入和刪除元素的過程。首先插入乙個元素a,不妨先把它...

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

templateclass queue queue t deletehead private stacks1 stacks2 首先,我們需要知道佇列和棧他們各自的特點。他們都是乙個線性資料結構。在stl裡面,他們是作為容器介面卡出現的。儘管如此,棧和佇列在邏輯和對資料的操作方式上還是有很大的區別的。...

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

題目 用兩個棧實現乙個佇列。結點的功能。1 template 2 class cqueue 3 分析 棧的特點是 先出,佇列的特點是先入先出。首先按照入佇列的順序將資料壓入棧stack1中,那麼當需要刪除隊首元素時意味著要刪除棧底元素,此時可利用另乙個棧進行資料轉移,按照stack1出棧的順序將資料...