자료구조

Queue

motosw3600 2021. 12. 29. 01:22

Queue

  • FIFO(First In First Out)형식의 자료구조
  • enqueue(데이터 추가)와 dequeue(데이터 추출)를 사용해 구현
  • swift의 reversed(시간복잡도 O(1))를 사용하여 구현

구현 코드

struct Queue<T> {
    var enqueue: [T]
    var dequeue: [T] = []
    
    var count: Int {
        return self.enqueue.count + self.dequeue.count
    }
    
    var isEmpty: Bool {
        return self.enqueue.isEmpty && self.dequeue.isEmpty
    }
    
    var first: T? {
        if self.dequeue.isEmpty {
            return self.enqueue.first
        } else {
            return self.dequeue.last
        }
    }
    
    var last: T? {
        if self.dequeue.isEmpty {
            return self.enqueue.last
        } else {
            return self.dequeue.first
        }
    }
    
    init(_ queue: [T]) {
        self.enqueue = queue
    }
    
    mutating func push(_ data: T) {
        self.enqueue.append(data)
    }
    
    mutating func pop() -> T? {
        if self.dequeue.isEmpty {
            self.dequeue = self.enqueue.reversed()
            self.enqueue.removeAll()
        }
        
        return self.dequeue.popLast()
    }
    
    mutating func removeAll() {
        self.enqueue.removeAll()
        self.dequeue.removeAll()
    }
}

var queue = Queue([1])

queue.push(2)
queue.push(3)
print(queue.last) // Optional(3)
print(queue.pop()) // Optional(1)
print(queue.first) // Optional(2)

'자료구조' 카테고리의 다른 글

Binary Tree  (0) 2022.01.26
Heap  (0) 2021.12.28