Stacks and Queues
Queue Enqueue/Dequeue
Enqueue values at the back and dequeue them from the front in first-in, first-out order.
Algorithm
Basic Implementation
basic.swift
func render(_ values: [Int]) -> String {
values.map(String.init).joined(separator: " -> ")
}
var queue: [Int] = []
for value in [10, 20, 30] { queue.append(value) }
var removed: [Int] = []
while !queue.isEmpty { removed.append(queue.removeFirst()) }
print(render(removed))
Complexity
- Time: O(1) per operation with a real queue
- Space: O(n)
Implementation notes
var queue: [Int] = []is a mutable Swift array used as the queue storage; the enqueue loop appends10,20, and30withqueue.append(value).var removed: [Int] = []collects dequeued values so the replay can show the removal order separately from the remaining queue.- The loop guard
while !queue.isEmptyprevents callingremoveFirst()on an empty array, so there is no optional return or sentinel value in this source. queue.removeFirst()returns the frontIntand shifts the remaining array contents left; that front removal is linear for SwiftArray.- The trace records
queuemoving from[]to[10, 20, 30], then the first dequeue producingremoved = [10]andqueue = [20, 30]. - The remaining dequeues leave
removed = [10, 20, 30]andqueue = []. render(_:)maps eachInttoStringand joins with" -> ", soprint(render(removed))outputs10 -> 20 -> 30.
front
The front is the oldest value still waiting in the queue.
FIFO
A queue removes values in first-in, first-out order.