CS, Data Structure - Stack, Queue

🧐 자료구조 중, 선형구조의 대표적인 StackQueue에 대해 정리를 해보았습니다.

🍁 Stack

Stack은 끝에서만 data가 추가 또는 제거를 하는 자료구조로 Data를 추가하는 경우를 push, 빼는 경우를 pop 이라 합니다. stack의 특징은 LIFO 로 데이터가 관리됩니다.

LIFO - Last In First Out

LIFO는 CS뿐만 아니라 다양한 분야에서도 사용되는 용어이죠! 그 내용과 똑같습니다. 예를 들면, 구매 관리를 하는데 있어서, 최근 생상된 생산품이 불량품이 발생 했다고 가정해보죠. 그러면 우리는 진열된 상품중 최근에 진열된 상품부터 하나씩 제거해야합니다. 즉, LIFO는 우리말로 후입선출이라고 합니다.

Stack by Swift

제네릭을 사용해서 어떤 타입도 들어올 수 있게 해서 작성하면 됩니다. 그냥 Array를 stack처럼 사용해도 무방할것이라 생각 되지만, 한번 코드로 작성해 보았습니다.

struct Stack<T> {
    private var stack = [T]()
    
    public var isEmpty: Bool {
        return stack.isEmpty
    }
    
    public mutating func push(_ element: T) {
        stack.append(element)
    }
    
    public mutating func pop() -> T? {
        return isEmpty ? nil : stack.popLast()
    }
}

🍁 Queue

Queue는 위에 Stack과 반대되는 구조로, 예상하듯이 FIFO로 데이터가 관리됩니다.

FIFO - First In First Out

FIFO는 진열된 상품 중 요통기한을 관리한다고 생각하면 됩니다. 유통기한이 지난 상품을 진열에서 제거하기 위해서는 가장 먼저 진열된 상품부터 제거해야겠죠! 즉, FIFO는 우리말로 선입선출이라고 합니다.

Queue by Swift

제네릭을 사용해서 어떤 타입도 들어올 수 있게 해서 작성하면 됩니다.

struct Queue<T> {
    private var queue = [T]()
    
    public var isEmpty: Bool {
        return queue.isEmpty
    }
    
    public mutating func enqueue(_ element: T) {
        queue.append(element)
    }
    
    public mutating func dequeue() -> T? {
        return isEmpty ? nil : queue.removeFirst()
    }
}

좋은 웹페이지 즐겨찾기