[Swift] Queue와 Stack 구현하기

 

 

 

저렴하게 그려본 스택과 큐,,, ^_^

 

알고리즘 수업을 들으면서 Stack과 Queue를 구현하는 걸 익혔는데 내가 따로 구현해 보고 넘어가려구 한다

평소에 스택을 활용한다고 해도 그냥 array를 활용해서 구현했는데 일케 본격적으로? 구현해 봤던 건 첨이라 신기했당 ㅋ

 

이제 슬슬 취준하면서 알고리즘 문제도 다시 풀어야 하는데 일단!! 그 전에 시간이 조금 남을 때 이전에 배웠던 큐와 스택을 직접 구현해 보려고 한다.

 

그런데 잠깐!!!!!

 

고럼 Stack과 Queue의 특징과 속해있는 method를 살펴보고 가자.

 

 

 

 

 

 

Stack

  • Last In First Out / First In Last Out: 선입 후출 / 후입선출 (근데일케도쓰나?)
    • 한쪽 끝에서만 자료를 넣고 뺄 수 있는 형식을 말한다.
    • 프링글스 통과 같다!
  • Method
    • push
    • pop
    • peek
    • isEmpty
    • count

 

직접 구현해 보자!

 

struct Stack<T> {
    private var elements: [T] = []
    init() { }
    
    mutating func push(with element: T) {
        elements.append(element)
    }
    
    mutating func pop(with element: T) {
        elements.popLast()
    }
    
    // elements에 요소가 있는 경우 마지막 요소 반환 / 없으면 nil
    func peek() -> T? {
        return elements.last
    }
    
    var isEmpty: Bool {
        return elements.isEmpty
    }
    
    var count: Int {
        return elements.count
    }
}

 

 

 

 

 

 

 

Queue

  • First In First Out: 선입선출
    • 맨 첨에 들어온 친구는 젤 먼저 나간다.
    • 줄 서기와 똑같음!
  • method
    • Enqueue
    • Dequeue
    • Peek
    • isEmpty
    • Count

 

 

직접 구현해 보자!!

 

struct Queue<T> {
    private var elements: [T] = []
    private var index = 0
    init() { }
    
    mutating func enqueue(with element: T) {
        elements.append(element)
    }
    
    mutating func dequeue(with element: T) -> T? {
        if index < count {
            let value = elements[index]
            index += 1
            return value
        } else {
            return nil
        }
    }
    
    func peek() -> T? {
        return index < count ? elements[index] : nil
    }
    
    var isEmpty: Bool {
        elements.isEmpty
    }
    
    var count: Int {
        elements.count
    }
}

 

 

 

'알고리즘' 카테고리의 다른 글

[Swift] 달리기 경주  (0) 2023.10.24