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

2021-07-22 15:17:35 字數 973 閱讀 6865

佇列的特點是「先進先出」,而棧的特點是「先入後出」。

方案一:

我們用乙個佇列作為主要維護棧的佇列,該佇列用來插入元素和彈出元素。

插入元素時,將元素直接插入到第乙個佇列的尾部。

彈出元素時:

(1)將第乙個佇列的除隊尾元素以外的所有元素依次彈出並且插入到第二個佇列中

(2)將第乙個佇列中剩下的那個元素彈出

(3)將第二個佇列中的所有元素依次倒回到第乙個佇列中。

方案二:

兩個佇列共同維護棧的入棧和出棧。

和方案一差不多,只是當刪除了棧頂元素時,不需要將第二個佇列中的元素倒回到第乙個佇列裡。

出棧時,將不為空的佇列中元素(出隊尾元素)匯出到另乙個佇列中,刪除隊尾元素

入棧時,只需判斷一下哪個佇列不為空,就插入到那個佇列中,當兩個佇列都為空時,插入到哪個佇列都可以。

#define _crt_secure_no_warnings 1

#include

#include

#include

#include

using namespace std;

template

class stack

void pop()

else

_pop(_q2, _q1);

}bool isempty()

else

return false;

}t&top()

else

return _q2.back();

}size_t size()

else

return _q2.size();

}void _pop(queue& q1, queue& q2)

q1.pop();

}private:

queue_q1;

queue_q2;

};void teststack()

}int main()

面試題(兩個棧實現乙個佇列和兩個佇列實現乙個棧)

面試題 判斷元素出棧入棧順序的合法性。面試題 實現乙個棧,要求實現push 出棧 pop 入棧 min 返回最小值的操作 的時間複雜度為o 1 我們知道棧是後進先出的,而佇列是先進先出的 我們建立兩個棧input 輸入棧 output 輸出棧 我們用input 輸入棧 來負責入隊,而output 輸...

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

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

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

本篇部落格主要闡釋內容 面試題 使用兩個佇列模擬實現乙個棧 include include 用兩個佇列實現乙個棧 這道題的目的在於讓我們利用佇列先進先出的原則實現棧 後進先出 的原則 所以這裡只模仿實現 push,pop,和top三個操作 怎麼倒?假設先放一組元素到佇列q1 q1 1,2,3,4 1...