在前面的小節裡已經實現了queue,當時所採用的是front和rear兩個指標分別指向隊頭和隊尾。由於本題限制,不能使用這些指標。
如何只使用stack實現queue呢?由於stack是現進後出(filo),而queue是先進先出的(fifo)。也就是說stack進行了一次反向,進行兩次反向就能實現queue的功能,所以可以用兩個stack實現queue。
假設兩個棧a和b,且都為空。可以認為棧a提供入隊的功能,棧b提供出隊的功能。下面是入隊和出隊的具體演算法:
(1)如果棧b不為空,直接彈出棧b的資料。
(2)如果棧b為空,則依次彈出棧a的資料,放入棧b中,再彈出棧b的資料。
於是可以得到下面myqueue定義及實現:(其中使用的mydata 和 mystack 是前一章的內容)
class myqueue
;//入隊
void myqueue::enqueue(mydata data)
//出隊
void myqueue::dequeue(mydata &data)
{ mydata temp(0); //區域性變數,用於臨時儲存
if(s2.isempty())
{
棧和佇列面試題
遞迴反轉乙個棧 void reverse stack s reverse s int tmp2 s.top s.pop reverse s s.push tmp1 reverse s s.push tmp2 遞迴排序乙個棧 void sort stack s sort s int tmp2 s.to...
棧和佇列面試題
1.使用兩個棧,實現乙個佇列。棧 先進後出,且只能從棧頂pop出資料。佇列 先進先出,對頭pop資料,隊尾push資料。如下 include template class myqueue void pop else if stack2.empty private stack stack1 stack...
棧和佇列面試題
採用順序棧實現棧基本操作 採用鏈式佇列實現佇列基本操作 define maxsize100 typedef int sdatatype typedef struct stack stack typedef struct minstack minstack void stackinit stack s...