用棧實現佇列這種方式我是想不到的,不過卻是很容易理解的一種方式。她其實是組合使用了兩個棧的「後進先出」來實現佇列的「先進先出」。這樣實現的佇列,其操作的時間複雜度為o(1)
演算法的實現思路:
準備兩個用於棧實現佇列:instack和outstack以下實現入隊和出隊的函式1、當有新元素入隊時 : 將其壓入instack 中
2、當需要出隊時 :
(1)當outstack 為空時 :
將instack 中的元素逐一彈出並壓入outstack 中
將outstack 的棧頂元素彈出
(2)當outstack 不為空時 :直接將outstack 的棧頂元素彈出
}void* squeue_retrieve(squeue* queue) // o(1)
}ret = linkstack_pop(squeue->outstack);
}return ret;}
棧和佇列的手動實現 用棧實現佇列 用佇列實現棧
1 用陣列結構實現大小固定的棧和佇列 1 棧 public static class arraystack arr new integer initsize size 0 public integer peek 返回棧頂元素但並不讓元素出棧 return arr size 1 public void...
佇列實現棧棧實現佇列
佇列是一種先進先出的資料結構,要想實現先進後出,需加乙個輔助佇列進行資料的來回倒 引用交換 從而實現棧結構。例如 5 4 3 2 1 用乙個輔助佇列裝 4 3 2 1,把5彈出,在把 4 3 2 1放回原佇列,如此反覆可變成5 4 3 2 1的棧結構。棧是一種先進後出的資料結構,要想實現先進先出,同...
佇列實現棧,棧實現佇列
兩個佇列實現棧 每次進入乙個佇列,取出得時候,把所有元素進入另乙個佇列,只留下乙個元素,以此實現棧的先進後出 filo package algorithmbymyself import j a.util.linkedlist import j a.util.queue 用兩個佇列實現乙個棧 publ...