[자료구조] Queue 큐

이은수, Steve·2025년 3월 12일
0

DataStructure

목록 보기
2/4
post-thumbnail

개요

First In First Out (FIFO)
먼저 입력된 데이터가 먼저 나간다.

큐는 이러한 형태로 가장 먼저 입력된 값이 가장먼저 출력된다.

어렵게 생각할것 없이 우리가 식당이나 버스를 기다릴때 서는 줄과 같은 구조라고 생각하면 된다.

큐의 동작

  • Queue에 데이터를 입출력하는 경우 enQueue/deQueue라는 키워드를 사용한다.
  • enQueue: 데이터 맨뒤에 데이터를 추가
  • deQueue: 맨 앞에 데이터를 반환 후 제거
  • isEmpty: 큐가 비어있는지 확인한다.
  • size: 전체 사이즈를 반환한다.
  • peek: queue 맨앞의 데이터를 조회한다.

in Swift

import Foundation

//가장 간단한 queue
struct Queue<T>{
    var queue:[T] = []
    
    var isEmpty: Bool{
        return queue.isEmpty
    }
    var size: Int{
        return queue.count
    }
    
    public mutating func enQueue(_ data: T){
        queue.append(data)
    }
    
    public mutating func deQueue() -> T?{
        var tmp:T? = queue.first
        queue.removeFirst()
        
        return queue.isEmpty ? nil : tmp
    }
    
    public func peek() -> T?{
        return queue.first
    }
}


//head를 이용gkdu 큐를 만들고 메모리 오버헤드 줄이기
struct Queue2<T>{
    var queue:[T?] = []
    var head:Int = 0
    
    var isEmpty: Bool{
        return queue.isEmpty
    }
    var count: Int{
        return queue.count
    }
    
    public mutating func enQueue(_ data: T){
        queue.append(data)
    }
    
    public mutating func deQueue() -> T?{
        guard head < queue.count, let element = queue[head] else { return nil }
        queue[head] = nil
        head += 1
        
        if head > 50 {
            queue.removeFirst(head)
            head = 0
        }
        return element
    }
    
}

활용

Queue는 주로 프로그램 내부의 스케쥴링등 순서가 필요한 작업에 주로 사용된다.

profile
iOS Developer, 천 리 길도 한 걸음부터

0개의 댓글

관련 채용 정보