資料結構之棧和佇列面試題(2)兩個棧實現乙個佇列

2021-08-19 17:30:03 字數 1712 閱讀 1397

我們怎麼用兩個棧來實現乙個佇列呢?

首先我們都知道,棧和佇列的 出棧和出佇列是不一樣的,棧是後入先出,佇列是先入先出。

所以我們的思路是,用兩個棧,乙個input,乙個output,

我們每次想入棧的時候就先將output裡面的元素依次出棧然後往input裡面依次入棧,這個時候,input棧頂元素就是最後入棧的元素,我們可以在他後面進行入棧操作,也相當於入佇列操作。

那麼,我們每次想要出棧的時候,就把我們input棧裡面的元素依次出棧,然後依次入棧到output裡面,這個時候output裡面最上面的元素就是最先入棧的元素,這個時候我們進行出棧操作,就相當於,佇列的出佇列操作

接下來就是具體的**實現

#include

#include

"seqstack.h"

#include

"seqstack.c"

typedef struct queuestackqueuestack;

初始化棧

void queuestack_init(queuestack *s)

seqstack_init(s->input);

seqstack_init(s->output);

}

列印函式

void queuestack_print(queuestack *s)

size_t i = 0;

for(;i < s->input.size;i++)

printf("\n");

}

入佇列函式

void queuestack_push(queuestack *s,seqstacktype value)

if(s->output.size ==

0)

size_t i =

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

seqstack_push(&s->input,value);

}

出棧函式

void queuestack_pop(queuestack *s)

seqstacktype top;

size_t i =

0; for(;i < s->input.size;i++)

seqstack_pop(&s->output);

}

取棧頂元素

int queuestack_gettop(queuestack *s,seqstacktype *value)

seqstacktype top;

size_t i =

0; for(;i < s->input.size;i++)

return seqstack_gettop(&s->output,value);

}

下面是測試函式以及驗證結果

如有錯誤,請指出,謝謝

資料結構之棧和佇列面試題(3)兩個佇列實現乙個棧

我們知道佇列是先進先出,而棧是後進先出的,所以要拿兩個佇列來實現乙個棧,我們思路就應該這樣 每次總保持乙個隊列為空,對另乙個佇列進行操作。入棧操作時,我們在那個有元素的佇列後面直接用入佇列操作,就相當於是棧的入棧操作。在進行出棧操作的時候,我們將有元素的佇列裡面的元素依次出佇列,並且入佇列另乙個佇列...

資料結構 棧面試題 兩個佇列實現乙個棧

上篇文章寫了用兩個棧實現乙個佇列,這篇文章實現用兩個佇列實現乙個棧,其實兩者的思想都是差不多的。下邊繼續畫圖說明 下邊給出實現 includetemplateclass stack else if q1.empty q1不空就push進q1 q1空,q2不空 直接放入q1,這樣pop的話可能更方便一...

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

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