기초 - 큐(🦩)

큐Queue

줄세우기
먼저 들어간게 먼저 나온다

  • enqueuing O(1)
  • dequeuing O(n)

LinkedList로 만들기 ( 다음 글에서 )
enqueue, dequeue, peek 기능


public struct Queue<T> {
    fileprivate var list = LinkedList<T>()
    
    public var isEmpty: Bool {
        return list.isEmpty
    }
    
    public mutating func enqueue(_ element: T) {
        list.append(element)
    }
    
    public mutating func dequeue() -> T? {
        //리스트가 비어있지 않을 때 리스트이 첫번째 원소를 element에 할당한다
        guard !list.isEmpty, let element = list.first else { return nil }
        list.remove(element)
        return element.value
    }
    
    //옵셔널로 처리해서 값이 없으면 nil을 리턴함
    public func peek() -> T? {
        return list.first?.value
    }
    
}

var queue = Queue<Int>()
queue.enqueue(10)
queue.enqueue(5)
queue.enqueue(37)

print(queue) //Queue(list: [10, 5, 37])

//CustomStringConvertible 프로토콜을 사용하면 String타입의 computed property인 description를 구현한다 (read only)
extension Queue: CustomStringConvertible {
    public var description: String {
        return list.description
    }
}

출처
https://www.raywenderlich.com/848-swift-algorithm-club-swift-queue-data-structure

https://github.com/raywenderlich/swift-algorithm-club

좋은 웹페이지 즐겨찾기