分析:思路一:將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 這道題應該不算難,比起 程式設計之美 中微軟那些什麼 翻烙餅 的面試題,難度上差遠了。況且,由於時間關...