λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
🍏 Today I Learned/Swift 문법

[Swift] μŠ€νƒ, 큐

by Joseph Seong 2023. 12. 6.

 

 

 

μŠ€νƒ, 큐

 

큐 (Queue)

 

  • 큐와 μŠ€νƒμ€ 데이터에 λŒ€ν•œ κ°œλ…μ΄λ‹€.
  • Swiftμ—μ„œλŠ” λ”°λ‘œ 큐와 μŠ€νƒμ„ μ§€μ›ν•˜μ§€ μ•ŠμœΌλ©΄ Array 등을 μ΄μš©ν•΄μ„œ 직접 κ΅¬ν˜„ν•  수 μžˆλ‹€.
  • First-In-First-Out (FIFO)
  • λ¨Όμ € λ“€μ–΄μ˜¨ 값을 λ¨Όμ € λ‚΄λ³΄λ‚΄λŠ” ꡬ쑰
/*
<T>λž€?
μ œλ„€λ¦­μ΄λΌλŠ” 것인데, ν•˜λ‚˜μ˜ νƒ€μž…μœΌλ‘œ κ΅­ν•œλ˜μ§€ μ•Šκ³ 
νƒ€μž…μ— μœ μ—°ν•˜κ²Œ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆλŠ” κΈ°λŠ₯
*/

// struct - λ‚΄λΆ€ 속성듀을 감싸고 μžˆλŠ” ν‹€
struct Queue<T> {
    private var queue: [T] = []
    
    public var count: Int {
        return queue.count
    }
    
    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()
    }
}

var queue = Queue<Int>()
queue.enqueue(10)
queue.enqueue(20)
queue.dequeue() // 10

 

 

μŠ€νƒ (Stack)

 

  • Last-In-First-Out (LIFO)
  • λ¨Όμ € λ“€μ–΄μ˜¨ 값을 κ°€μž₯ λ§ˆμ§€λ§‰μ— λ‚΄λ³΄λ‚΄λŠ” ꡬ쑰
struct Stack<T> {
    private var stack: [T] = [] // 처음 μŠ€νƒμ€ 빈 λ°°μ—΄λ‘œ μ‹œμž‘
    
    public var count: Int {
        return stack.count
    }
    
    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()
    }
}

var stack = Stack<Int>()
stack.push(10)
stack.push(20)
stack.pop() // 20