본문 바로가기

카테고리 없음

Stack, Queue 개념

반응형

Stack (스택)

LIFO(Last In First Out) 데이터 구조를 따르며 나중에 입력된 것이 먼저 출력되는 구조를 가진다. 스택은 배열과 유사하지만, 개별 요소에 접근하기 위한 메소드가 좀 더 제한적이다. 또한 스택은 개별 요소에 접근하는 방법을 강하게 제한한 인터페이스를 제공한다. 스택에서 사용되는 가장 일반적인 구조는 배열 또는 연결 목록이며, 데이터 처리 성능 특성에 따라 결정된다. Swift는 collection 타입을 Array, Dictionary, Set 만 지원하기에 스택을 구현하고 싶다면 직접 구현해야한다.

  • push () : 스택의 하단에 요소 추가
  • pop () : 스택의 상다느이 요소를 삭제한 뒤 반환
  • peek () : 스택의 상단 요소를 삭제하지 않고 반환 
  • count : 스택의 요소 수 반환
  • isEmpty () : 스택에 포함된 요소가 없는 경우 true, 아니면 false 반환
  • isFull () : 스택 크기가 지정되어있는 경우 가능. 스택이 가득 찼으면 true, 아니면 false 반환
struct Stack<T> {
    private var elements = [T]()
    
    public init() {}
    
    public mutating func pop() -> T? {
        return self.elements.popLast()
    }
    public mutating func push(element : T) {
        self.elements.append(element)
    }
    public mutating func peek() -> T {
        return self.elements.last
    }
    
    public func isEmpty : Bool {
        return self.elemets.isEmpty
    }
    public var count : Int {
        return self.elements.count
    }
}

 

Queue (큐)

FIFO (First In First Out) 데이터 구조를 따르며 먼저 입력된 데이터가 먼저 출력되는 구조를 가진다. Queue는 입력된 순서대로 데이터를 처리할 때 보편적으로 활용되는 방법이며, 음식점에서 주문 계산에 사용하는 POS 시스템이 대표적이다.

  • enqueue () : 큐의 맨 뒤에 새로운 요소 추가
  • dequeue () : 큐의 첫 번째 요소를 제거한 뒤 반환
  • peek () : 큐의 첫 번째 요소를 제거하지 않고 반환
  • clear () : 큐를 요소를 전부 비움 
  • count : 큐에 속한 요소의 수를 반환
  • isEmpty() : 큐가 비어있으면 true, 아니면 false 반환
  • isFull() : 큐가 가득 차있으면 true, 아니면 false 반환
  • capacity : 큐의 용량을 가져오거나 설정하기 위한 read/write 프로퍼티
  • insert(_ : atIndex) : 큐의 특정 인덱스 위치에 요소 삽입
  • removeAtIndex(_) :큐의 특정 인덱스 위치에 있는 요소 제거
struct Queue<T> {
    private var data = [T]()
    
    public init() {}
    
    public mutating func dequeue() -> T? {
        return data.removeFirst()
    }
    public func peek() -> T? {
        return data.first
    }
    public mutating func enqueue(element: T) {
        data.append(element)
    }
    public mutating func clear() {
        data.removeAll()
    }
    public var count : Int {
        return data.count
    }
    public var capacity : Int {
        get {
            return data.capacity
        } set {
            data.reserveCapacity(newValue)
        }
    }
    public func isFull() -> Bool {
        return count == data.capacity
    }
    public func isEmpty() -> Bool {
        return data.isEmpty
    }
}

 

반응형