import Foundation
// Define a generic Queue class
class Queue<T> {
private var elements: [T] = []
func enqueue(_ element: T) {
elements.append(element)
}
func dequeue() -> T? {
guard !elements.isEmpty else {
print("Queue is empty. Cannot dequeue.")
return nil
}
return elements.removeFirst()
}
func peek() -> T? {
return elements.first
}
func isEmpty() -> Bool {
return elements.isEmpty
}
func size() -> Int {
return elements.count
}
func printQueue() {
if elements.isEmpty {
print("Queue is empty.")
} else {
print("Queue contents:", elements.map { "\($0)" }.joined(separator: ", "))
}
}
}
let queue = Queue<Int>()
// Enqueue elements
queue.enqueue(10)
queue.enqueue(20)
queue.enqueue(30)
queue.printQueue()
// Peek at the first element
if let first = queue.peek() {
print("First element (peek): \(first)")
}
// Dequeue elements
if let dequeued = queue.dequeue() {
print("Dequeued element: \(dequeued)")
}
if let dequeued = queue.dequeue() {
print("Dequeued element: \(dequeued)")
}
// Check if the queue is empty
print("Is the queue empty? \(queue.isEmpty())")
// Enqueue more elements
queue.enqueue(40)
queue.enqueue(50)
queue.printQueue()
print("Queue size: \(queue.size())")
// Dequeue the remaining elements
while !queue.isEmpty() {
if let dequeued = queue.dequeue() {
print("Dequeued element: \(dequeued)")
}
}
/*
run:
Queue contents: 10, 20, 30
First element (peek): 10
Dequeued element: 10
Dequeued element: 20
Is the queue empty? false
Queue contents: 30, 40, 50
Queue size: 3
Dequeued element: 30
Dequeued element: 40
Dequeued element: 50
*/