Swift Queue

🧩 Syntax:
import Foundation

class Queue<T: Equatable> {
    
    var storage: [T]
    
    init(head: T) {
        storage = [head]
    }
    
    // add the element to the queue
    func enqueue(_ element: T) {
        storage.append(element)
    }
    
    // return the next element to be dequeued from the queue
    // if the queue is empty, return nil
    func peek() -> T? {
        return storage.first
    }
    
    // remove and return the next element to be dequeued
    func dequeue() -> T? {
        return storage.removeFirst()
    }
}


// Test cases

// Setup
let q = Queue(head: 1)
q.enqueue(2)
q.enqueue(3)

// Test peek
print(q.peek()!) // Should be 1

// Test dequeue
print(q.dequeue()!) // Should be 1
 
// Test enqueue
q.enqueue(4)
print(q.dequeue()!) // Should be 2
print(q.dequeue()!) // Should be 3
print(q.dequeue()!) // Should be 4
q.enqueue(5)
print(q.peek()!) // Should be 5