개발하자 중엽아
  • [선형 자료구조] 덱/데크(Deque)
    2024년 08월 12일 15시 06분 52초에 업로드 된 글입니다.
    작성자: 이중엽

    덱(Deque)이란?

    덱(Deque)은 큐와 스택의 특성을 모두 가지는 자료구조이다.

    일반적인 큐와 달리, 덱은 양쪽 끝에서 삽입과 삭제가 가능하다.

     

    - 양쪽 끝에서의 삽입/삭제: 덱은 양쪽 끝에서 삽입과 삭제가 가능하며, 이로 인해 여러 가지 패턴의 자료처리가 가능합니다.

    - FIFO와 LIFO: 덱은 큐처럼 FIFO(First-In-First-Out) 방식으로도 동작할 수 있고, 스택처럼 LIFO(Last-In-First-Out) 방식으로도 동작할 수 있습니다.

     

    구현

    class Deque<T> {
        private var enque: [T]
        private var deque: [T] = []
        
        var isEmpty: Bool {
            return enque.isEmpty && deque.isEmpty
        }
        
        var count: Int {
            return enque.count + deque.count
        }
        
        init(_ collection: [T]) {
            self.enque = collection
        }
        
        func pushFront(_ element: T) {
            deque.append(element)
        }
        
        func pushLast(_ element: T) {
            enque.append(element)
        }
        
        func popFront() -> T? {
            if deque.isEmpty {
                deque = enque.reversed()
                enque.removeAll()
            }
            return deque.popLast()
        }
        
        func popLast() -> T? {
            if enque.isEmpty {
                enque = deque.reversed()
                deque.removeAll()
            }
            return enque.popLast()
        }
        
        func front() -> T? {
            if deque.isEmpty {
                return enque.first
            }
            return deque.last
        }
        
        func back() -> T? {
            if enque.isEmpty {
                return deque.first
            }
            return enque.last
        }
        
        func contains(_ elem: T) -> Bool {
            return enque.contains(elem) || deque.contains(elem)
        }
    }
    
    let deque = Deque([Int]())

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

    [자료구조] 트리(Tree)  (0) 2024.08.13
    [선형 자료구조] 큐(Queue)  (0) 2024.08.12
    [선형 자료구조] 스택(Stack)  (0) 2024.08.12
    댓글