๐Ÿ–ฅ CS/์ž๋ฃŒ๊ตฌ์กฐ

[์ž๋ฃŒ๊ตฌ์กฐ] LinkedList

Kiwi๐Ÿ’ป 2022. 5. 17. 16:05

LinkedList๋ž€?

์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ(LinkedList)๋Š” ๋…ธ๋“œ๊ฐ€ ๋ฐ์ดํ„ฐ์™€ ํฌ์ธํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ํ•œ ์ค„๋กœ ์—ฐ๊ฒฐ ๋˜์–ด ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ์ด๋‹ค.

์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋Š” ์œ„์— ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ๋…ธ๋“œ๋“ค์ด ์—ฐ๊ฒฐ๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งํ•œ๋‹ค. ๋…ธ๋“œ๋Š” ๋‘ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง€๋Š”๋ฐ ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ ์˜์—ญ๊ณผ ํฌ์ธํ„ฐ์ด๋‹ค. ๋ฐ์ดํ„ฐ ์˜์—ญ์—๋Š” ๋‹น์—ฐํžˆ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š” ์˜์—ญ์ด๋ฉฐ, ํฌ์ธํ„ฐ๋Š” ๋‹ค์Œ์ด๋‚˜ ์ด์ „์˜ ๋…ธ๋“œ์˜ ์ฐธ์กฐ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ๋‹ค๋ฅธ ๋…ธ๋“œ์™€์˜ ์—ฐ๊ฒฐ์„ ๋‹ด๋‹นํ•œ๋‹ค.

LinkedList ํŠน์ง•

LinkedList์˜ ์ฒซ๋ฒˆ์งธ ํŠน์ง•์œผ๋กœ๋Š” ํ•˜๋‚˜์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•˜๋Š”(์ •์ ํ• ๋‹น) ๋ฐฐ์—ด๊ณผ๋Š” ๋‹ฌ๋ฆฌ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋Š” ๊ฐ๊ฐ ๋–จ์–ด์ง„ ๊ณต๊ฐ„์— ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐ๊ฐ’์„ ํ†ตํ•ด ์—ฐ๊ฒฐํ•ด ๋†“์€ ๊ฒƒ(๋™์ ํ• ๋‹น)์ด๋ผ๋Š” ์ ์ด๋‹ค.

  • ๊ทธ๋ฆผ1

๋˜ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์ค‘๊ฐ„์— ์š”์†Œ๋ฅผ ์‚ฝ์ž… ๋˜๋Š” ์‚ญ์ œ ์‹œ ์žฌ๋ฐฐ์น˜์— ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๋„ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.(๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ๋Š” ๋งˆ์น˜ ์ผ์ž๋กœ ๋œ ๊ตํšŒ์˜์ž์— ์•‰์•„ ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค ์‚ฌ์ด์— ์•‰์œผ๋ ค๋Š” ํ–‰์œ„์™€ ๊ฐ™๋‹ค: ํ•œ๋ช… ๋•Œ๋ฌธ์— ๋งŽ์€ ์‚ฌ๋žŒ์ด ํ•œ์นธ์”ฉ ๋‹น๊ฒจ ์•ˆ๊ฑฐ๋‚˜ ํ•œ์นธ์”ฉ ๋น„์ผœ์ค˜์•ผํ•จ)

  • ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ์žฌ๋ฐฐ์น˜ ์˜ˆ์‹œ

๊ทธ๋ฆผ1์˜ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ 3,8,5์—์„œ 3๊ณผ 8์‚ฌ์ด์— 6์„ ์ง‘์–ด ๋„ฃ์œผ๋ ค๋ฉด 3์˜ ํฌ์ธํ„ฐ ์ฐธ์กฐ๊ฐ’์„ 8->6์œผ๋กœ 6์˜ ์ฐธ์กฐ๊ฐ’์„ 8๋กœ๋งŒ ์„ค์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๋‹จ์ ์œผ๋กœ๋Š” ๋ฐฐ์—ด์ฒ˜๋Ÿผ Index๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ์ฒซ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋ถ€ํ„ฐ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊นŒ์ง€ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฐพ์•„๊ฐ€์•ผ๋งŒ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค(8์„ ์ฐพ์•„๊ฐ€๋ ค๋ฉด ๊ฐ ๋…ธ๋“œ์˜ ํฌ์ธํ„ฐ๋ฅผ ๋”ฐ๋ผ 3->6->8). ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ ‘๊ทผ ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

๋˜ํ•œ ์—ฐ๊ฒฐ ์ •๋ณด(ํฌ์ธํ„ฐ)๋ฅผ ์ €์žฅํ•˜๋Š” ๋ณ„๋„์˜ ์˜์—ญ์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ €์žฅ๊ณต๊ฐ„์˜ ํšจ์œจ์ด ๋†’์ง€ ์•Š๋‹ค.

head

  • head: ๊ฐ€์žฅ ์ฒซ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฅดํ‚ค๋Š” ํ”„๋กœํผํ‹ฐ๋ฅผ ๋œปํ•จ

๊ทธ๋ฆผ1์˜ ๊ฒฝ์šฐ 3์ด๋ž€ data๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ head๋ผ ํ•  ์ˆ˜ ์žˆ์Œ

Swift์—์„œ LinkedList์™€ Node ๊ตฌํ˜„ํ•˜๊ธฐ

  • Node
class Node<T: CalculateItem> {
    private var data: T?
    var next: Node<T>?
    // ๋‹ค์Œ ๋…ธ๋“œ์˜ ์ฐธ์กฐ๊ฐ’์„ ๋‹ด๋Š” ์˜์—ญ์ด๊ธฐ๋•Œ๋ฌธ์— Node์ž์ฒด๋ฅผ ํƒ€์ž…์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
    init(data: T, next: Node?) {
        self.data = data
        self.next = next
    }
}

extension Node: Equatable {
    static func == (lhs: Node<T>, rhs: Node<T>) -> Bool {
        lhs === rhs
    }
}
// ์ œ๋„ค๋ฆญ ํƒ€์ž…์€ ๋ฌด์Šจ ํ˜•ํƒœ์˜ ํƒ€์ž…์ด ๋Œ€์ž… ๋ ์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— Equatable ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค(Int, String๋“ฑ์€ ์ฑ„ํƒํ•˜๊ณ  ์žˆ์Œ). ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ถ”ํ›„ ๊ฐ’์„ ๋น„๊ต ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ฑ„ํƒ์„ ๋ณ„๋„๋กœ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  • LinkedList
struct LinkedList<T: CalculateItem> {
    private(set) var head: Node<T>?

    var isEmpty: Bool {
            return head == nil
        }

    mutating func append(data: T) {
        if head == nil {
            head = Node(data: data)
            return
        }

        var node = head
        while node?.next != nil {
            node = node?.next
        }
        node?.next = Node(data: data)
    }

   mutating func removeFirst() -> T? {
        if head == nil {
            return nil
        }

        let firstElement = head?.data
        head = head?.next
        return firstElement
    }

    mutating func removeAll() {
        head = nil
    }
    //ARC์˜ ์˜ํ•ด ์ž์‹ ์„ ๊ฐ€๋ฅดํ‚ค๋Š” ์ฐธ์กฐ๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ์˜์—ญ์—์„œ ์ž๋™ ํ•ด์ œ ๋จ, ๊ทธ๋Ÿฌ๋ฏ€๋กœ head๋งŒ nil๋กœ ๋งŒ๋“ค์–ด ์ฃผ๋ฉด ๋ชจ๋“  ๊ฐ’์ด ์‚ญ์ œ๋จ
}

'๐Ÿ–ฅ CS > ์ž๋ฃŒ๊ตฌ์กฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์ž๋ฃŒ๊ตฌ์กฐ] ํ(QUEUE)  (0) 2022.05.17