CS, Data Structure - Stack, Queue

iDOยท2021๋…„ 10์›” 22์ผ

CS

๋ชฉ๋ก ๋ณด๊ธฐ
3/3
post-thumbnail

๐Ÿง ์ž๋ฃŒ๊ตฌ์กฐ ์ค‘, ์„ ํ˜•๊ตฌ์กฐ์˜ ๋Œ€ํ‘œ์ ์ธ Stack๊ณผ Queue์— ๋Œ€ํ•ด ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

๐Ÿ 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()
    }
}
profile
์ด๊ณณ์€ ์ €๋ฅผ ์œ„ํ•œ iOS ์„ค๋ช…์„œ์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€