使用 Swift 程序实现队列数据结构
队列是一种遵循 FIFO(先进先出)原则的数据结构。队列的两端都是开放的,因此我们可以从一端(称为尾部)添加新元素,此操作称为入队;从另一端(称为头部)移除元素,此操作称为出队。
虽然 Swift 不支持任何内置队列数据结构,但我们仍然可以使用各种方式实现队列,例如链表、结构体、类、数组等。您可以根据需要使用任何方法来实现队列数据结构。
队列支持以下操作 -
入队 - 它用于从队列的尾部添加元素。因此,在 Swift 中,我们通过 append() 方法实现入队操作。
语法
func Enqueue(_ items: T) {
item.append(items)
}
这里,append() 函数向队列中添加一个新元素。
出队 − 它用于从队列头部或前端移除元素。因此,在 Swift 中,我们通过 removeLast() 方法实现出队操作。
语法
func Dequeue() -> T? {
if item.isEmpty{
return nil
} else {
return item.removeFirst()
}
}
此处,removeFirst() 函数用于从队列中移除元素。
Top − 它用于从队列中获取元素。因此,在 Swift 中,我们利用 first 属性实现了 top 操作。
语法
func Top() -> T? {
return item.first
}
此处,first 属性用于从堆栈中查找要取出的元素。
isEmpty − 它用于检查队列是否为空。因此,在 Swift 中,我们通过 isEmpty 属性实现 isEmpty 操作。
语法
func IsEmpty() -> Bool {
return item.isEmpty
}
此处,isEmpty 属性用于检查队列是否为空。如果返回 true,则表示堆栈为空。否则返回 false。
Size − 它用于检查队列的大小。因此,在 Swift 中,我们可以使用 count 属性来实现大小操作。
语法
func Size()->Int{
return item.count
}
此处,count 属性用于查找队列中元素的总数。
注意 − 由于频繁的入队和出队操作,使用数组实现队列并非最高效的方法。
示例 1
在下面的 Swift 程序中,我们将使用结构体实现一个队列数据结构。我们定义了一个包含 enqueue、dequeue、top、size 和 isEmpty 方法的队列结构体。然后,我们创建该队列结构体的实例,使用 Enqueue() 函数向队列中添加一些元素,并使用 Dequeue() 函数按先进先出 (FIFO) 顺序移除这些元素。最后,显示输出。
import Foundation
import Glibc
// 使用结构体实现堆栈
struct queue<T> {
private var item = [T]()
mutating func Enqueue(_ items: T) {
item.append(items)
}
mutating func Dequeue() -> T? {
if item.isEmpty{
return nil
} else {
return item.removeFirst()
}
}
func IsEmpty() -> Bool {
return item.isEmpty
}
func Size()->Int{
return item.count
}
func Top() -> T? {
return item.first
}
}
var myQueue = queue<Int>()
myQueue.Enqueue(34)
myQueue.Enqueue(42)
myQueue.Enqueue(1)
myQueue.Enqueue(89)
myQueue.Enqueue(32)
myQueue.Enqueue(8)
print("Size of the queue is:", myQueue.Size())
print("Top Element of the queue is:", myQueue.Top()!)
print("Dequeue Elements are:")
while !myQueue.IsEmpty() {
if let c = myQueue.Dequeue()
{
print(c)
}
}
输出
Size of the queue is: 6 Top Element of the queue is: 34 Dequeue Elements are: 34 42 1 89 32 8
示例 2
在下面的 Swift 程序中,我们将使用类实现一个队列数据结构。我们定义了一个队列类,其中包含 enqueue、dequeue、top、size 和 isEmpty 方法。然后,我们创建该队列类的实例,使用 Enqueue() 函数向队列中添加一些元素,并使用 Dequeue() 函数按先进先出 (FIFO) 的顺序移除这些元素。最后,显示输出。
import Foundation
import Glibc
// 使用类实现堆栈
class queue<T> {
private var item = [T]()
func Enqueue(_ items: T) {
item.append(items)
}
func Dequeue() -> T? {
if item.isEmpty{
return nil
} else {
return item.removeFirst()
}
}
func IsEmpty() -> Bool {
return item.isEmpty
}
func Size()->Int{
return item.count
}
func Top() -> T? {
return item.first
}
}
var myQueue = queue<Character>()
myQueue.Enqueue("Q")
myQueue.Enqueue("U")
myQueue.Enqueue("E")
myQueue.Enqueue("U")
myQueue.Enqueue("E")
print("Size of the queue is:", myQueue.Size())
print("Top Element of the queue is:", myQueue.Top()!)
print("Dequeue Elements are:")
while !myQueue.IsEmpty() {
if let c = myQueue.Dequeue()
{
print(c)
}
}
输出
Size of the queue is: 5 Top Element of the queue is: Q Dequeue Elements are: Q U E U E
结论
以上就是我们实现队列数据结构的方法。队列数据结构对于调度任务、执行广度优先搜索 (BFS) 算法、异步操作等非常有用。队列数据结构的灵活性和简单性使其在数据管理和高效执行某些特定算法方面更加灵活。