如何只使用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...