module Stack: Stack
非同步存取
對堆疊進行非同步存取可能會導致佇列狀態無效。因此,對堆疊的並行存取必須同步(例如使用 Mutex.t
)。
type !'a
t
包含 'a
型別元素的堆疊型別。
exception Empty
val create : unit -> 'a t
回傳一個新的堆疊,初始為空。
val push : 'a -> 'a t -> unit
push x s
將元素 x
加入堆疊 s
的頂端。
val pop : 'a t -> 'a
pop s
移除並回傳堆疊 s
最頂端的元素,若堆疊為空則會引發 Stack.Empty
例外。
val pop_opt : 'a t -> 'a option
pop_opt s
移除並回傳堆疊 s
最頂端的元素,若堆疊為空則回傳 None
。
val drop : 'a t -> unit
drop s
移除堆疊 s
最頂端的元素,若堆疊為空則會引發 Stack.Empty
例外。
val top : 'a t -> 'a
top s
回傳堆疊 s
最頂端的元素,若堆疊為空則會引發 Stack.Empty
例外。
val top_opt : 'a t -> 'a option
top_opt s
回傳堆疊 s
最頂端的元素,若堆疊為空則回傳 None
。
val clear : 'a t -> unit
從堆疊中丟棄所有元素。
val copy : 'a t -> 'a t
回傳給定堆疊的副本。
val is_empty : 'a t -> bool
如果給定的堆疊為空,則回傳 true
,否則回傳 false
。
val length : 'a t -> int
回傳堆疊中元素的數量。時間複雜度 O(1)
val iter : ('a -> unit) -> 'a t -> unit
iter f s
依序將 f
應用於 s
的所有元素,從堆疊頂端的元素到堆疊底部的元素。堆疊本身保持不變。
val fold : ('acc -> 'a -> 'acc) -> 'acc -> 'a t -> 'acc
fold f accu s
等同於 (f (... (f (f accu x1) x2) ...) xn)
,其中 x1
是堆疊的頂端,x2
是第二個元素,而 xn
是最底部的元素。堆疊保持不變。
val to_seq : 'a t -> 'a Seq.t
從堆疊頂端到底端迭代。在迭代期間修改堆疊是安全的。
val add_seq : 'a t -> 'a Seq.t -> unit
將序列中的元素新增到堆疊的頂端。
val of_seq : 'a Seq.t -> 'a t
從序列建立一個堆疊。