ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Data Structure] Linked List (Feat. Array)
    Data Structure 2022. 1. 12. 23:44

    ๋ฐฐ์—ด (Array)์ด๋ž€?

    • ์›์†Œ๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ์— ์—ฐ์†์ ์œผ๋กœ ์ €์žฅ๋œ ์ž๋ฃŒ๊ตฌ์กฐ
    • ์ธ๋ฑ์Šค๋กœ ๋ฐฐ์—ด์˜ ์›์†Œ๋ฅผ ๋ฐ”๋กœ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

    ๋ฐฐ์—ด์˜ ํŠน์ง•

    • O(1)์— n๋ฒˆ์งธ ์›์†Œ๋ฅผ ํ™•์ธํ•˜๊ณ , ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ถ”๊ฐ€์ ์œผ๋กœ ์†Œ๋ชจ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์–‘, ์ฆ‰ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๊ฑฐ์˜ ์—†๋‹ค.
    • ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ๋ฐ์ดํ„ฐ๋“ค์ด ๋ถ™์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์—, Cache hit rate๊ฐ€ ๋†’๋‹ค.
    • ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ์—ฐ์†์ ์œผ๋กœ ๊ตฌ๊ฐ„์„ ์žก์•„์•ผํ•˜๋ฏ€๋กœ, ํ• ๋‹น์— ๋‹ค์†Œ ์ œ์•ฝ์ด ์žˆ๋‹ค.
      • ๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ, ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค ์ด์™ธ์˜ ์ธ๋ฑ์Šค์— ์ƒˆ๋กญ๊ฒŒ ์›์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ๋•Œ, ์›์†Œ๋“ค์„ ์ƒˆ๋กญ๊ฒŒ ๋ฐฐ์น˜ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ.
        ใ…ค

    ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ (Linked List)๋ž€?

    • ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ์—ฐ์†์ ์ด์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋“ค์„ ๋งํฌ๋กœ ์—ฐ๊ฒฐํ•ด๋†“์€ ์ž๋ฃŒ๊ตฌ์กฐ
    • ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ๋…ธ๋“œ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋Š”๋ฐ, ๋…ธ๋“œ๋Š” data (๋ฐ์ดํ„ฐ), link (๋งํฌ)๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋‹ค.
      • data์—๋Š” ๋ฐ์ดํ„ฐ๊ฐ€, link์—๋Š” ๋‹ค์Œ์— ์˜ฌ ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ๊ฐ’์ด ์ €์žฅ๋œ๋‹ค.
    • ๋…ธ๋“œ๋“ค์ด ์—ฐ๊ฒฐ๋˜์–ด ์ด๋ฃจ์–ด์ง„ ๊ฒƒ์ด ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ.
    •  
    • INKED

    ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ํŠน์ง•

    • n๋ฒˆ์งธ ์›์†Œ๋ฅผ ํ™•์ธ/๋ณ€๊ฒฝํ•  ๋•Œ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n)์ด๋‹ค.
    • ์ž„์˜์˜ ์œ„์น˜์— ์›์†Œ๋ฅผ ์ถ”๊ฐ€/์‚ญ์ œํ•  ๋•Œ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(1)์ด๋‹ค.
    • ์›์†Œ๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ์—ฐ์†์ ์œผ๋กœ ์ €์žฅ๋˜์–ด์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, Cache hit rate๊ฐ€ ๋‚ฎ์ง€๋งŒ ํ• ๋‹น์ด ๋‹ค์†Œ ์‰ฝ๋‹ค.

    ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์ž„์˜์˜ ์œ„์น˜์— ์›์†Œ ์ถ”๊ฐ€/์‚ญ์ œํ•˜๊ธฐ

    • ์‹œ๊ฐ„ ๋ณต์žก๋„ = O(1)
    • ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์—์„œ 2๋ฒˆ์งธ ์œ„์น˜์— ์›์†Œ ์ถ”๊ฐ€ํ•˜๊ธฐ
      • ์ฒซ๋ฒˆ์งธ ์›์†Œ๊ฐ€ ์ƒˆ๋กœ ์ถ”๊ฐ€๋˜๋Š” ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•˜๊ณ , ์ƒˆ๋กœ ์ถ”๊ฐ€๋˜๋Š” ์›์†Œ๋Š” ์›๋ž˜ 2๋ฒˆ์งธ ์œ„์น˜์— ์กด์žฌํ•˜๋˜ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•œ๋‹ค.
    • ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์—์„œ 2๋ฒˆ์งธ ์œ„์น˜์— ์กด์žฌํ•˜๋Š” ์›์†Œ ์ œ๊ฑฐํ•˜๊ธฐ
      • ์ฒซ๋ฒˆ์งธ ์›์†Œ๊ฐ€ 2๋ฒˆ์งธ ์›์†Œ๊ฐ€ ์•„๋‹Œ ์„ธ๋ฒˆ์งธ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•˜๊ธฐ

    ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์ข…๋ฅ˜

    • ๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ (Singly Linked List)
      • ๊ฐ ์›์†Œ๊ฐ€ ์ž์‹ ์˜ ๋‹ค์Œ ์›์†Œ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ–๋Š”๋‹ค.
      • ์ฃผ์–ด์ง„ ์›์†Œ์˜ ์ด์ „ ์›์†Œ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค.
    • ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ (Doubly Linked List)
      • ๊ฐ ์›์†Œ๊ฐ€ ์ž์‹ ์˜ ์ด์ „ ์›์†Œ์™€ ๋‹ค์Œ ์›์†Œ์˜ ์ฃผ์†Œ๋ฅผ ๋ชจ๋‘ ๊ฐ–๋Š”๋‹ค.
      • ์ฃผ์–ด์ง„ ์›์†Œ์˜ ์ด์ „ ์›์†Œ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
      • ์›์†Œ๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋Š” ์ •๋ณด๊ฐ€ ๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ณด๋‹ค 1๊ฐœ ๋” ๋Š˜์–ด๋‚˜๋ฏ€๋กœ, ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋” ๋“ ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.
    • ์›ํ˜• ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ (Circular Linked List)
      • ๋ฆฌ์ŠคํŠธ์˜ ๋์ด ์ฒ˜์Œ๊ณผ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋‹ค.
      • ๊ฐ ์›์†Œ๊ฐ€ ์ž์‹ ์˜ ์ด์ „ ์›์†Œ์™€ ๋‹ค์Œ ์›์†Œ์˜ ์ฃผ์†Œ๋ฅผ ๋ชจ๋‘ ๊ฐ–๊ณ  ์žˆ์–ด๋„, ์—†์–ด๋„ ์ƒ๊ด€์ด ์—†๋‹ค.

    ใ…ค

    linkedlist

    ใ…ค

    ๋ฐฐ์—ด vs ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ

    arraylistgra

    ใ…ค

    ์•ผ๋งค ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ๊ตฌํ˜„ํ•˜๊ธฐ

    ์›์†Œ๋ฅผ ๋ฐฐ์—ด๋กœ ๊ด€๋ฆฌํ•˜๊ณ  pre์™€ nxt์— ์ด์ „/๋‹ค์Œ ์›์†Œ์˜ ํฌ์ธํ„ฐ ๋Œ€์‹  ๋ฐฐ์—ด ์ƒ์˜ ์ธ๋ฑ์Šค๋ฅผ ์ €์ •ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ.

    let MX = 100
    var dat = [Int](repeating: 0, count: MX) // ๋ฐ์ดํ„ฐ ์ €์žฅ
    var pre = [Int](repeating: -1, count: MX) // ์ด์ „ ์ฃผ์†Œ (์ธ๋ฑ์Šค) ์ €์žฅ
    var nxt = [Int](repeating: -1, count: MX) // ๋‹ค์Œ ์ฃผ์†Œ (์ธ๋ฑ์Šค) ์ €์žฅ
    var unused = 1 // ํ˜„์žฌ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ธ๋ฑ์Šค (์ƒˆ๋กœ์šด ์›์†Œ๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ธ๋ฑ์Šค)๋กœ, ์›์†Œ ์ถ”๊ฐ€ ์ดํ›„์—๋Š” 1์”ฉ ์ฆ๊ฐ€
    • dat[i] : i๋ฒˆ์ง€ ์›์†Œ์˜ ๊ฐ’
    • pre[i] : i๋ฒˆ์ง€ ์›์†Œ์— ๋Œ€ํ•ด ์ด์ „ ์›์†Œ์˜ ์ธ๋ฑ์Šค
    • nxt[i] : i๋ฒˆ์ง€ ์›์†Œ์— ๋Œ€ํ•ด ๋‹ค์Œ ์›์†Œ์˜ ์ธ๋ฑ์Šค
    • pre๋‚˜ nxt์˜ ๊ฐ’์ด -1์ด๋ฉด ํ•ด๋‹น ์›์†Œ์˜ ์ด์ „/๋‹ค์Œ ์›์†Œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋œป์ด๋‹ค.
    • unused : ํ˜„์žฌ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ธ๋ฑ์Šค. ์ฆ‰ ์ƒˆ๋กœ์šด ์›์†Œ๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ธ๋ฑ์Šค๋กœ, ์›์†Œ๊ฐ€ ์ถ”๊ฐ€๋œ ์ดํ›„์—๋Š” 1์”ฉ ์ฆ๊ฐ€๋  ๊ฒƒ์ด๋‹ค.
    • 0๋ฒˆ์ง€๋Š” ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์‹œ์ž‘ ์›์†Œ๋กœ ๊ณ ์ •. ๋‹ค๋ฅด๊ฒŒ ๋งํ•˜์ž๋ฉด 0๋ฒˆ์ง€์—๋Š” ๊ฐ’์ด ๋“ค์–ด๊ฐ€์ง€ ์•Š๊ณ  ๋‹จ์ง€ ์‹œ์ž‘์ ์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•œ dummy node์ด๋‹ค.
    • ๊ธธ์ด๊ฐ€ ๋”ฐ๋กœ ํ•„์š”ํ•˜๋‹ค๋ฉด, len ๋ณ€์ˆ˜๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค๊ณ  ์›์†Œ๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๊ณ , ์ œ๊ฑฐ๋  ๋•Œ 1์”ฉ ๊ฐ์†Œ์‹œํ‚ค๋ฉด ๋œ๋‹ค.

    traverse ํ•จ์ˆ˜ - ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๋ชจ๋“  ์›์†Œ๋“ค ์ถœ๋ ฅํ•˜๊ธฐ

    • 0๋ฒˆ์ง€์—์„œ ์ถœ๋ฐœํ•ด์„œ nxt์— ์ ํžŒ ๊ฐ’์„ ๋ณด๊ณ  ๊ณ„์† ๋„˜์–ด๊ฐ€๋ฉด์„œ dat๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.
    • cur๋ผ๋Š” ๋ณ€์ˆ˜์— ๊ฐ ์›์†Œ๋“ค์˜ ์ฃผ์†Œ๋ฅผ ๋‹ด์•„๊ฐ€๋ฉด์„œ ์ด๋™ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, cur์— -1์ด ์ €์žฅ๋˜๋ฉด ๋์— ๋„๋‹ฌํ–ˆ๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ while๋ฌธ์„ ํƒˆ์ถœํ•˜๊ณ  traverse๊ฐ€ ์ข…๋ฃŒ๋œ๋‹ค.
    /// ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๋ชจ๋“  ์›์†Œ๋“ค์„ ์ถœ๋ ฅ (์—ฐ๊ฒฐ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅ)
    func traverse() {
        var cur = nxt[0]
        while cur != -1 {
            print(dat[cur], terminator: " ")
            cur = nxt[cur]
        }
        print("** traverse ๋ **")
    }
    

    insert ํ•จ์ˆ˜ - ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์— ์›์†Œ ์‚ฝ์ž…ํ•˜๊ธฐ

    • ์ƒˆ ์›์†Œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ด ๋•Œ unused ๊ฐ’์ด ์ƒˆ๋กœ์šด ์›์†Œ๊ฐ€ ๋“ค์–ด๊ฐˆ ์ธ๋ฑ์Šค๊ฐ€ ๋œ๋‹ค.
    • ์ƒˆ ์›์†Œ์˜ pre ๊ฐ’์— ์‚ฝ์ž…ํ•  ์œ„์น˜์˜ ์ฃผ์†Œ (์ธ๋ฑ์Šค)๋ฅผ ๋Œ€์ž…ํ•œ๋‹ค.
    • unused๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ณณ์ด ์ƒˆ๋กœ์šด ์›์†Œ๊ฐ€ ๋“ค์–ด๊ฐˆ ์ž๋ฆฌ. ๊ทธ ์ž๋ฆฌ์˜ dat์— ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.
    /// ์˜ˆ๋ฅผ ๋“ค์–ด ์›์†Œ 13์ด 2๋ฒˆ์ง€์ด๊ณ  13 ๋’ค์— 20์„ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์€๊ฑฐ๋ฉด insert(2, 20)์„ ํ˜ธ์ถœ
    /// unused๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ณณ์ด ์ƒˆ๋กœ์šด ์›์†Œ๊ฐ€ ๋“ค์–ด๊ฐˆ ์ž๋ฆฌ. ๊ทธ ์ž๋ฆฌ์˜ dat์— ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.
    /// - Parameters:
    ///   - addr: ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ์›์†Œ์˜ ์œ„์น˜ (์ฃผ์†Œ, ์ธ๋ฑ์Šค, ๋ฒˆ์ง€)
    ///   - num: ์ถ”๊ฐ€ํ•  ๊ฐ’
    func insert(addr: Int, num: Int) {
        // 1. ์ƒˆ๋กœ์šด ์›์†Œ ์ƒ์„ฑ
        dat[unused] = num
    
        // 2. ์ƒˆ ์›์†Œ์˜ pre ๊ฐ’์— ์‚ฝ์ž…ํ•  ์œ„์น˜ (์ฃผ์†Œ) ๊ฐ’ ์ €์žฅ
        pre[unused] = addr
    
        // 3. ์ƒˆ ์›์†Œ์˜ nxt ๊ฐ’์— ์‚ฝ์ž…ํ•  ์œ„์น˜์˜ nxt ๊ฐ’ ์ €์žฅ
        nxt[unused] = nxt[addr]
    
        // 4. ์ƒˆ๋กญ๊ฒŒ ๋“ค์–ด๊ฐ„ ์›์†Œ์˜ ์ž๋ฆฌ์— ์›๋ž˜ ์žˆ๋˜ ์›์†Œ์˜ nxt ๊ฐ’๊ณผ ์‚ฝ์ž…ํ•  ์œ„์น˜์˜ ๋‹ค์Œ ์›์†Œ์˜ pre ๊ฐ’์„ ์ƒˆ ์›์†Œ๋กœ ๋ณ€๊ฒฝ
        // (์‚ฝ์ž…ํ•  ์œ„์น˜์˜ nxt ๊ฐ’๊ณผ ์‚ฝ์ž…ํ•  ์œ„์น˜์˜ ๋‹ค์Œ ์›์†Œ์˜ pre ๊ฐ’์„ ์ƒˆ ์›์†Œ๋กœ ๋ณ€๊ฒฝ)
        if nxt[unused] != -1 { // ์ƒˆ๋กœ ์‚ฝ์ž…ํ•œ ์›์†Œ๊ฐ€ ๋งˆ์ง€๋ง‰์ด ์•„๋‹ ๊ฒฝ์šฐ์—๋งŒ!
            pre[nxt[addr]] = unused
        }
        nxt[addr] = unused
        unused += 1
    }

    erase ํ•จ์ˆ˜ - ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์— ์›์†Œ ์‚ฝ์ž…ํ•˜๊ธฐ

    • ์ด์ „ ์›์†Œ์˜ nxt๋ฅผ ์‚ญ์ œํ•˜๋ ค๋Š” ์›์†Œ์˜ nxt๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.
    • ๋‹ค์Œ ์›์†Œ์˜ pre๋ฅผ ์‚ญ์ œํ•˜๋ ค๋Š” ์›์†Œ์˜ pre๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค. ์‚ญ์ œํ•˜๋ ค๋Š” ์›์†Œ๊ฐ€ ๋งˆ์ง€๋ง‰ ์›์†Œ๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ์—๋งŒ ์ด ์ž‘์—…์„ ์ง„ํ–‰ํ•œ๋‹ค.
    ///  ์›์†Œ 13์ด 2๋ฒˆ์ง€์ด๊ณ , 13์„ ์ง€์šฐ๊ณ  ์‹ถ์œผ๋ฉด erase(2)๋ฅผ ํ˜ธ์ถœ
    /// - Parameter addr: ์ง€์šฐ๋ ค๋Š” ์›์†Œ์˜ ์œ„์น˜ (์ฃผ์†Œ, ์ธ๋ฑ์Šค, ๋ฒˆ์ง€)
    func erase(addr: Int) {
        // 1. ์ด์ „ ์›์†Œ์˜ nxt๋ฅผ ์‚ญ์ œํ•˜๋ ค๋Š” ์›์†Œ์˜ nxt๋กœ ๋ณ€๊ฒฝ
        nxt[pre[addr]] = nxt[addr]
    
        // 2. ๋‹ค์Œ ์›์†Œ์˜ pre๋ฅผ ์‚ญ์ œํ•˜๋ ค๋Š” ์›์†Œ์˜ pre๋กœ ๋ณ€๊ฒฝ.
        if nxt[addr] != -1 { // ์‚ญ์ œํ•˜๋ ค๋Š” ์›์†Œ๊ฐ€ ๋งˆ์ง€๋ง‰ ์›์†Œ๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ์—๋งŒ!
            pre[nxt[addr]] = pre[addr]
        }
    }

    ์ „์ฒด ์•ผ๋งค ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ์ฝ”๋“œ

    import Foundation
    
    let MX = 100
    var dat = [Int](repeating: 0, count: MX
    var pre = [Int](repeating: -1, count: MX)
    var nxt = [Int](repeating: -1, count: MX)
    var unused = 1
    
    func insert(addr: Int, num: Int) {
        dat[unused] = num
        pre[unused] = addr
        nxt[unused] = nxt[addr]
    
        if nxt[unused] != -1 {
            pre[nxt[addr]] = unused
        }
        nxt[addr] = unused
        unused += 1
    }
    
    func erase(addr: Int) {
        nxt[pre[addr]] = nxt[addr]
    
        if nxt[addr] != -1 {
            pre[nxt[addr]] = pre[addr]
        }
    }
    
    func traverse() {
        var cur = nxt[0]
        while cur != -1 {
            print(dat[cur], terminator: " ")
            cur = nxt[cur]
        }
        print("** traverse ๋ **")
    }
    
    print("๐Ÿ˜‡insert test๐Ÿ˜‡")
    insert(addr: 0, num: 10)
    traverse() // 10(address=1)
    insert(addr: 0, num: 30)
    traverse() // 30(address=2) 10
    insert(addr: 2, num: 40)
    traverse() // 30 40(address=3) 10
    insert(addr: 1, num: 20)
    traverse() // 30 40 10 20(address=4)
    insert(addr: 4, num: 70)
    traverse() // 30 40 10 20 70(address=5)
    
    print("\n๐Ÿ˜‡erase test๐Ÿ˜‡")
    erase(addr: 1)
    traverse() // 30 40 20 70
    erase(addr: 2)
    traverse() // 40 20 70
    erase(addr: 4)
    traverse() // 40 70
    erase(addr: 5)
    traverse() // 40

    ์Šคํฌ๋ฆฐ์ƒท 2022-02-27 ์˜คํ›„ 10 00 46

    ใ…ค
    ใ…ค

    ์ถœ์ฒ˜

    'Data Structure' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

    [Data Structure] ๊ทธ๋ž˜ํ”„์™€ ํŠธ๋ฆฌ  (0) 2022.03.14
    [Data Structure] ํ (Queue)  (0) 2022.02.13
    [Data Structure] ์Šคํƒ (Stack)  (0) 2022.02.09

    ๋Œ“๊ธ€

Designed by Tistory.