模块 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

从序列创建堆栈。