scala定义一个队列
时间: 2023-12-07 22:54:43 浏览: 100
可以使用Scala标准库中的Queue类来定义一个队列。下面是一个示例代码:
```
import scala.collection.mutable.Queue
// 创建一个空队列
val queue = Queue[Int]()
// 向队列中添加元素
queue.enqueue(1)
queue.enqueue(2)
queue.enqueue(3)
// 从队列中取出元素
val x = queue.dequeue() // x的值为1
// 判断队列是否为空
val isEmpty = queue.isEmpty // isEmpty的值为false
// 获取队列的长度
val size = queue.length // size的值为2
// 遍历队列中的所有元素
queue.foreach(println)
```
在上面的示例代码中,我们首先创建了一个空队列,然后向队列中添加了三个整数。接着,我们使用dequeue方法从队列中取出一个元素,并将其赋值给变量x。然后,我们使用isEmpty方法判断队列是否为空,使用length方法获取队列的长度。最后,我们使用foreach方法遍历队列中的所有元素,并将它们打印出来。
相关问题
scala定义一个队列 实现队列元素的先进先出
可以使用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
```
阅读全文