Scala中的队列
队列是一种先进先出 (FIFO) 数据结构。 Scala 提供了不可变队列和可变队列。可变队列可以就地更新或扩展。这意味着可以更改、添加或删除队列的元素作为副作用。相比之下,不可变队列永远不会改变。
在 Scala 中,队列被实现为一对列表。一个用于插入元素,第二个用于包含已删除的元素。元素被添加到第一个列表并从第二个列表中删除。 Queue 最基本的两个操作是Enqueue和Dequeue 。
- Enqueue – 在队列末尾添加一个元素。
- Dequeue – 从队列的开头删除一个元素。
队列中的方法:
- +=:此方法用于在队列末尾添加单个元素。
- ++=:此方法用于在队列末尾插入多个元素。
- clear:从队列中删除所有元素。
- dequeue:返回队列中的第一个元素
- enqueue:将所有元素添加到队列中。
- equals:检查两个队列是否在结构上相同。
- front:返回队列中的第一个元素。
- isEmpty:检查队列是否为空。
下面是演示这些操作的简单 Scala 程序:
示例 1:
// Scala program for illustrating Queue
// Import Queue
import scala.collection.mutable._
// Creating object
object GfG
{
// Main method
def main(args:Array[String])
{
// Initialize a queue
var q1 = Queue(1, 2, 3, 4, 5)
// Print the elements of queue
print("Queue Elements: ")
q1.foreach((element:Int) => print(element+" "))
// Print the first element of the queue
var firstElement = q1.front
println("\nFirst element in the queue: "+ firstElement)
// Enqueue 10 in the queue
q1.enqueue(10)
// Print the elements of queue
print("Queue Elements after enqueue: ")
q1.foreach((element:Int) => print(element+" "))
// Dequeue first element from the queue
var deq = q1.dequeue
// Print the elements of queue
print("\nQueue Elements after dequeue: ")
q1.foreach((element:Int) => print(element+" "))
// Print the Dequeued element
print("\nDequeued element: " + deq)
// using isEmpty method
println("\nQueue is empty: "+ q1.isEmpty)
}
}
输出:
Queue Elements: 1 2 3 4 5
First element in the queue: 1
Queue Elements after enqueue: 1 2 3 4 5 10
Queue Elements after dequeue: 2 3 4 5 10
Dequeued element: 1
Queue is empty: false
示例 2:
// Scala program for illustrating Queue
// Import Queue
import scala.collection.mutable._
// Creating object
object GfG
{
// Main method
def main(args:Array[String])
{
// Initialize a queue
var fruits = Queue[String]()
// Adding elements to the queue
fruits.enqueue("apple")
fruits.enqueue("banana")
fruits.enqueue("mango")
fruits.enqueue("guava")
// Print the elements of queue
print("Queue Elements: ")
fruits.foreach((element:String) => print(element+" "))
// Print the first element of the queue
var firstElement = fruits.front
println("\nFirst element in the queue: "+ firstElement)
// Enqueue pineapple in the queue
fruits.enqueue("pineapple")
// Print the elements of queue
print("Queue Elements after enqueue: ")
fruits.foreach((element:String) => print(element+" "))
// Dequeue first element from the queue
var deq = fruits.dequeue
// Print the elements of queue
print("\nQueue Elements after dequeue: ")
fruits.foreach((element:String) => print(element+" "))
// Print the Dequeued element
print("\nDequeued element: " + deq)
// Using clear method
println("\nclear the queue: "+ fruits.clear)
// Using isEmpty method
println("\nqueue is empty: "+ fruits.isEmpty)
}
}
输出:
Queue Elements: apple banana mango guava
First element in the queue: apple
Queue Elements after enqueue: apple banana mango guava pineapple
Queue Elements after dequeue: banana mango guava pineapple
Dequeued element: apple
clear the queue: ()
queue is empty:true