佇列的特殊實現 用棧實現佇列

2021-10-04 09:58:40 字數 571 閱讀 8237

用棧實現佇列這種方式我是想不到的,不過卻是很容易理解的一種方式。她其實是組合使用了兩個棧的「後進先出」來實現佇列的「先進先出」。這樣實現的佇列,其操作的時間複雜度為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...