[作業] 用兩個 Queue 來實作一個 Stack
//假設: Q[0] 為 Queue(Push/Pop/Total Function)
// Q[1] 為 Queue(Push/Pop/Total Function)
//
//需求: 使用 Q[0], Q[1] 組出一個 S Stack(Push/Pop Function)
//
//---------------------------------------------------------------------
//[開始]
//設定 MainQueue 為 Q[0] (以下把 MainQueue 簡寫為 MQ)
// AuxQueue 為 Q[1] (以下把 AuxQueue 簡寫為 AQ)
int j = 0;
Queue Q[2];
Queue *MQ = Q + j, *AQ = Q + (j + 1)%2;
//[ S Push Function ] - 從 S Push 1 Item
//若 MQ 已滿 -
// S Push Fail
//否則 -
// 步驟1. 做 MQ Push 1 Item
MQ -> Push(/* new item */);
//[ S Pop Function ] - 從 S Pop 1 Item
//若 MQ 為空 -
// S Pop Fail
//否則 -
// 步驟1. 從 MQ Pop (Total Item(s) Of MQ - 1) Item(s) 且依序做 AQ Push
int i;
for( i = 0; i < MQ.Total() - 1; ++i)
AQ -> Push( MQ -> Pop() );
// 步驟2. 做 MQ Pop 1 Item
item tmp = MQ -> Pop();
// 步驟3. 交換設定 MQ 為 AQ 而 AQ 為 MQ
j = (j + 1)%2;
*MQ = Q + j;
*AQ = Q + (j + 1)%2;
(僅供參考)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.169.224.131
※ 編輯: qazplm 來自: 118.169.224.131 (10/25 19:22)
→
10/25 20:48, , 1F
10/25 20:48, 1F
推
10/25 20:50, , 2F
10/25 20:50, 2F
→
10/25 20:52, , 3F
10/25 20:52, 3F
→
10/25 20:58, , 4F
10/25 20:58, 4F
補程式碼,改標題為作業
※ 編輯: qazplm 來自: 118.169.224.131 (10/25 23:50)
→
10/26 00:15, , 5F
10/26 00:15, 5F
→
10/26 00:16, , 6F
10/26 00:16, 6F
推
10/26 00:43, , 7F
10/26 00:43, 7F
→
10/26 02:18, , 8F
10/26 02:18, 8F