scala定义一个队列 实现队列元素的先进先出
时间: 2023-12-07 20:53:16 浏览: 77
实现队列先进先出 源代码
5星 · 资源好评率100%
可以使用List来实现一个队列,如下所示:
```scala
class Queue[T] private (private val leading: List[T], private val trailing: List[T]) {
// 入队
def enqueue[U >: T](elem: U): Queue[U] =
new Queue(leading, elem :: trailing)
private def mirror =
if (leading.isEmpty)
new Queue(trailing.reverse, Nil)
else
this
// 出队
def dequeue: (T, Queue[T]) = {
val q = mirror
(q.leading.head, new Queue(q.leading.tail, q.trailing))
}
def isEmpty = leading.isEmpty && trailing.isEmpty
override def toString: String = (leading ::: trailing.reverse).mkString(",")
}
object Queue {
// 创建空队列
def apply[T](elems: T*): Queue[T] = new Queue(elems.toList, Nil)
}
```
在这个实现中,Queue类有两个私有变量:leading和trailing,分别表示队列的前面和后面部分。enqueue方法将新元素添加到队列的后面,而dequeue方法返回队列的头部元素,并返回一个新的队列,其中已经删除了该元素。isEmpty方法检查队列是否为空。toString方法用于将队列转换为字符串。
可以使用以下代码来测试这个队列的实现:
```scala
val q = Queue(1, 2, 3)
println(q) // 输出:1,2,3
val q1 = q.enqueue(4)
println(q1) // 输出:1,2,3,4
val (x, q2) = q1.dequeue
println(x) // 输出:1
println(q2) // 输出:2,3,4
```
阅读全文