資料結構之棧與佇列的面試題 用兩個棧實現乙個佇列

2021-08-18 16:16:34 字數 1401 閱讀 3938

棧的原則是先進的後出,而佇列是先進先出,那麼如何利用兩個棧來實現乙個佇列呢?

我們的思路是利用兩個棧,乙個棧作為橋梁,而另外乙個作為我們的「佇列」。實際上,我們首先對橋梁棧進行入棧,入棧完畢後,再依次去橋梁棧內元素,入棧到我們的「佇列」當中去,此時我們的橋梁棧的棧頂就變成了我們「佇列」裡的隊尾,而橋梁棧的棧底,則變成了「佇列」裡的隊首。

//實現

#include

#include

"seqstack.h"

typedef struct queue_by2stackinit queue_by2stack;

void queue_by2stackinit(queue_by2stack* q)//初始化新的佇列

seqstackinit(&q->input);

seqstackinit(&q->output);

return;

}void queue_by2stackpush(queue_by2stack* q, seqstacktype value)//入隊

seqstacktype top;

int ret;

while(1)

seqstackpush(&q->input, top);

seqstackpop(&q->output);

} seqstackpush(&q->input, value);

while(1)

seqstackpush(&q->output, top);

seqstackpop(&q->input);

} return;

}void queue_by2stackpop(queue_by2stack* q)//出隊

seqstackpop(&q->output);

return;

}int queue_by2stacktop(queue_by2stack* q, seqstacktype* value)//取隊首元素

if(q->output.size ==

0) seqstackgetfront(&q->output, value);

return1;}

void queue_by2stackprint(queue_by2stack* q)

size_t i =

0; for(; i < q->output.size; ++i)

printf("\n");

}

同樣這裡,也用到了我們的順序棧的基本操作函式來幫助我們實現這個隊裡。

//測試**

int main()

資料結構之棧與佇列的面試題 用兩個佇列實現乙個棧

首先要用佇列實現棧,我們主要的問題是,應該讓先入佇列的元素後出去,這樣就是棧的操作了,那該如何操作呢?我們這裡的思路是,首先兩個佇列,起初在入棧的時候插入到任意乙個空佇列當中即可,接下來,如果入棧應該插入到乙個有元素的佇列當中去。在出棧的時候,應該把有元素的佇列內的前n 1個元素全部入到另乙個空佇列...

資料結構之棧和佇列的經典面試題

在這個題目中要求要返回乙個棧裡面的最小值。有兩種方法 1 用兩個棧,乙個棧存入棧的資料,另乙個棧存對應的最小值,如果入棧的順序為5,8,1,3,4,則存最小值的那個棧存入的資料應該為5,5,1,1,1。2 與上邊一樣,用兩個棧,乙個放資料,另乙個放最小值,最小值由結構體組成有兩部分乙個是資料元素da...

資料結構 棧和佇列及其面試題

1.利用順序表實現棧 函式介面 typedef int sdatatype typedef struct stack stack 初始化 void stackinit stack pstack 壓棧 void stackpush stack pstack,sdatatype data 出棧 void...