首先要用佇列實現棧,我們主要的問題是,應該讓先入佇列的元素後出去,這樣就是棧的操作了,那該如何操作呢?
我們這裡的思路是,首先兩個佇列,起初在入棧的時候插入到任意乙個空佇列當中即可,接下來,如果入棧應該插入到乙個有元素的佇列當中去。在出棧的時候,應該把有元素的佇列內的前n-1個元素全部入到另乙個空佇列內部,接著把剩下的最後乙個元素出棧即可。
//實現如下
#include
#include
"seqqueue.h"
typedef struct stack_by2queuestack_by2queue;
void stack_by2queueinit(stack_by2queue* q)//初始化棧
seqqueueinit(&q->queue1);
seqqueueinit(&q->queue2);
return;
}void stack_by2queuepush(stack_by2queue* q, seqqueuetype value)//入棧
if(q->queue1.size !=
0) else
return;
}void stack_by2queuepop(stack_by2queue* q)//出棧
if(q->queue1.size ==
0&& q->queue2.size ==
0) seqqueuetype top;
while(1)
seqqueuegetfront(&q->queue1, &top);
seqqueuepush(&q->queue2, top);
seqqueuepop(&q->queue1);
}} else
seqqueuegetfront(&q->queue2, &top);
seqqueuepush(&q->queue1, top);
seqqueuepop(&q->queue2);}}
}}int stack_by2queuetop(stack_by2queue* q, seqqueuetype* value)//取棧頂元素
if(q->queue1.size ==
0&& q->queue2.size ==
0) while(1)
}} else }}
}}void stack_by2queueprint(stack_by2queue* q)
size_t i =
0; if(q->queue1.size !=
0) printf("%c ",q->queue1.
data
[i]);
}} else
printf("%c ",q->queue2.data
[i]);
}} printf("\n");
return;
}
這裡我們利用之前所實現的佇列的基本操作來幫助我們完成一些操作。
//測試**如下
int main()
資料結構之棧與佇列的面試題 用兩個棧實現乙個佇列
棧的原則是先進的後出,而佇列是先進先出,那麼如何利用兩個棧來實現乙個佇列呢?我們的思路是利用兩個棧,乙個棧作為橋梁,而另外乙個作為我們的 佇列 實際上,我們首先對橋梁棧進行入棧,入棧完畢後,再依次去橋梁棧內元素,入棧到我們的 佇列 當中去,此時我們的橋梁棧的棧頂就變成了我們 佇列 裡的隊尾,而橋梁棧...
資料結構之棧和佇列的經典面試題
在這個題目中要求要返回乙個棧裡面的最小值。有兩種方法 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...