棧和鏈表面試題 使用兩個棧實現乙個佇列

2021-09-21 14:44:55 字數 1259 閱讀 2654

分析:

思路一:將stack1作為儲存空間,將stack2作為臨時緩衝區,入隊時,直接壓入stac1,出隊時,將stack1中的元素依次出棧壓入stack2中,再將stack2的棧頂元素彈出,最後將stack2中的元素再倒回給stack1

思路二:入隊時,判斷stack1是否為空,如果stack1為空,則將stack2中的所有元素都倒入stack1中,再將元素直接壓入stack1,否則,直接壓入stack1中  

出隊時,判斷stack2是否為空,如果stack2為空,則將stack1中的元素倒入stack2中,在將stack2的棧頂元素彈出,否則,直接彈出stack2的棧頂元素

思路三:入隊時,直接壓入stack1中

出隊時,判斷stack2是否為空,如果stack2為空,則將stack1中的元素倒入stack2中,否則直接彈出stack2中的元素

下面實現的是思路一

#pragma once

#include "stack.h"

typedef struct queues queues;

void queuesinit(queues* pqs); //初始化

void queuespush(queues* pqs, stackdatatype data); //插入

void queuespop(queues* pqs); //刪除

stackdatatype queuesfront(queues* pqs); //獲取首元素

void testqueues(); //測試函式

#include"queues.h"

void queuesinit(queues* pqs)

void queuespush(queues* pqs, stackdatatype data)

void queuespop(queues* pqs)

} stackpop(&(pqs->stack2));

}stackdatatype queuesfront(queues* pqs)

} return gettop(&(pqs->stack2));

}void testqueues()

for (int i = 0; i < 10; i++)

}

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

思路 設棧1的棧頂 隊尾 棧2 的棧頂 隊頭 入隊 資料放在棧1 出隊 檢測棧2 是否有資料 有 出棧 沒有 將棧1 的資料匯入棧2出棧 取隊頭 取棧2的棧頂 檢測棧2 是否有資料 有 返回棧頂元素 沒有 將棧1 的資料匯入棧2出棧 取隊尾 取棧1的棧頂 檢測棧1 是否有資料 有 返回棧頂元素 沒有...

面試題 兩個佇列實現棧

兩個佇列實現棧 前提已知 typedef struct queue queue void initqueue queue q void enqueue queue q,int key int dequeue queue q int sizeofqueue queue q int isqueueemp...

面試題7 兩個棧實現佇列

已知下面stack類及其3個方法push pop和 count,請用2個stack實現queue類的入隊 enqueue 出隊 dequeue 方法。class stack class queue 這道題應該不算難,比起 程式設計之美 中微軟那些什麼 翻烙餅 的面試題,難度上差遠了。況且,由於時間關...