module Stack:sig
..end
後進先出堆疊。
此模組實作堆疊(LIFO),並具有就地修改的功能。
未同步存取
對堆疊進行未同步存取可能會導致無效的佇列狀態。因此,對堆疊的並行存取必須同步(例如使用 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
從序列建立堆疊。