使用棧Stack實現佇列Queue

2021-06-25 23:40:42 字數 852 閱讀 7646

如何只使用stack實現queue呢?由於stack是現進後出(filo),而queue是先進先出的(fifo)。也就是說stack進行了一次反向,進行兩次反向就能實現queue的功能,所以可以用兩個stack實現queue。

假設兩個棧instack和outstack,且都為空。可以認為onstack提供入隊的功能,棧outstack提供出隊的功能。下面是入隊和出隊的具體演算法:

(1)如果棧outstack不為空,直接彈出棧outstack頂部的資料;

(2)如果棧outstack為空,則依次彈出棧instack的資料,放入棧outstack中,再彈出棧outstack頂部的資料;

實現的**:

/**

* 使用兩個棧來模擬佇列

* * @param *

*/public class simulationqueue

/*** 入隊

* * @param t

*/public void enqueue(t t)

/*** 出隊

*/public t dequeue() else

if (!outstack.isempty())

}return temp;

} /**

* 佇列是否為空

* * @return

*/public boolean isempty()

/*** 清空佇列

*/public void clear()

}

測試**:

public static void main(string args) 

}

輸出:

面試題 使用棧stack實現佇列queue

在前面的小節裡已經實現了queue,當時所採用的是front和rear兩個指標分別指向隊頭和隊尾。由於本題限制,不能使用這些指標。如何只使用stack實現queue呢?由於stack是現進後出 filo 而queue是先進先出的 fifo 也就是說stack進行了一次反向,進行兩次反向就能實現que...

棧(Stack)和佇列(Queue)

棧和佇列是兩種重要的線性結構。從資料結構角度看,棧和佇列也是線性表,其特殊性在於棧和佇列的基本操作是線性表操作的子集,它們是操作受限的線性表,因 此,可稱為限定性的資料結構。但從資料型別角度看,它們是和線性表大不相同的兩類重要的抽象資料型別。由於它們廣泛應用在各種軟體系統中,因此在物件導向 的程式設...

雙向佇列deque 棧stack

dequeq 定義乙個雙向佇列q,型別為int q.push front a 將a從隊首插入佇列 q.push back a 將a從隊尾插入佇列 q.pop front 隊首彈掉乙個元素 q.pop back 隊尾彈出乙個元素 a q.front 返回隊首元素 a q.back 返回隊尾元素 a q...