模組 Stack

module Stack: sig .. end

後進先出堆疊。

此模組實作堆疊(LIFO),並具有就地修改的功能。


未同步存取

對堆疊進行未同步存取可能會導致無效的佇列狀態。因此,對堆疊的並行存取必須同步(例如使用 Mutex.t)。

type !'a t 

包含 'a 型別元素的堆疊型別。

exception Empty

當對空堆疊應用 Stack.popStack.top 時會拋出此例外。

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

從序列建立堆疊。