[์ž๋ฃŒ๊ตฌ์กฐ] ์ด์ค‘ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ(Doubly Linked List)๋ž€?

2022. 12. 11. 22:52ยท๐Ÿ“š ์ž๋ฃŒ๊ตฌ์กฐ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฆฌ์ŠคํŠธ
728x90

์ด์ค‘ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ž€?

  • ๋‹จ์ˆœ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ์„ ํ–‰ ๋…ธ๋“œ๊ฐ€ ์ฐพ๊ธฐ ํž˜๋“ค๋‹ค๋Š” ์ ์„ ๋ณด์™„ํ•œ ๋ฆฌ์ŠคํŠธ
  • ๊ฐ ๋…ธ๋“œ๊ฐ€ ์„ ํ–‰ ๋…ธ๋“œ์™€ ํ›„์† ๋…ธ๋“œ์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ๊ฐ€์ง€๋Š” ๋ฆฌ์ŠคํŠธ
  • ๋…ธ๋“œ์˜ left link์™€ right link๊ฐ€ ๊ฐ๊ฐ ๋‹ค๋ฅธ ๋…ธ๋“œ์˜ ์˜ค๋ฅธ์ชฝ ๋งํฌ์™€ ์™ผ์ชฝ ๋งํฌ๋ฅผ ์—ฐ๊ฒฐ์ง“๋Š”๋‹ค.
  • ํ—ค๋“œ๋ถ€๋ถ„๋„ ๋…ธ๋“œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.
  • ๋‹จ์ ์€ ๊ณต๊ฐ„์„ ๋งŽ์ด ์ฐจ์ง€ํ•˜๊ณ  ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•˜๋‹ค.

โ€ป ํ—ค๋“œ๋…ธ๋“œ๋ž€?

ํ—ค๋“œ๋…ธ๋“œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๊ณ  ์˜ค๋กœ์ง€ ์‚ฝ์ž…, ์‚ญ์ œ ์ฝ”๋“œ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•  ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๋…ธ๋“œ์ด๋‹ค. ๋”ฐ๋ผ์„œ ํ—ค๋“œ ํฌ์ธํ„ฐ์™€์˜ ๊ตฌ๋ณ„์ด ํ•„์š”ํ•˜๋ฉฐ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๊ณต๋ฐฑ์ƒํƒœ๋ผ๋ฉด ํ—ค๋“œ ๋…ธ๋“œ๋งŒ ์กด์žฌํ•˜๋Š” ์ƒํƒœ์ด๋‹ค. ์ด๋•Œ ํ—ค๋“œ๋…ธ๋“œ์˜ left link๋Š” right link๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉฐ right link๋Š” left link๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ƒํƒœ์ด๋‹ค.

 


 

 

๋…ธ๋“œ ๊ตฌ์กฐ์ฒด

typedef int element;
// ์ด์ค‘ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ๋…ธ๋“œ ํƒ€์ž…
typedef struct DListNode {
    element data;
    struct DListNode* llink;
    struct DListNode* rlink;
}DListNode;
// ์ด์ค‘ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ์ดˆ๊ธฐํ™”
void init(DListNode* phead) {
    phead->llink = phead;
    phead->rlink = phead;
}
  • data๋Š” ๊ธฐ์กด์˜ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์™€ ๊ฐ™์ง€๋งŒ, link ๋Œ€์‹ ์— llink์™€ rlink 2๊ฐœ๋ฅผ ๋ฉค๋ฒ„๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง„๋‹ค.
  • llink์˜ค rlink๋Š” phead๋กœ ์ดˆ๊ธฐํ™”

 

 

์‚ฝ์ž…์—ฐ์‚ฐ

  1. new_node์˜ llink๊ฐ€ before๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
  2. new_node์˜ rlink๊ฐ€ before์˜ rlink๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
  3. before์˜ rlink์˜ llink๊ฐ€ new_node๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
  4. before์˜ rlink๊ฐ€ new_node๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
// ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ๋…ธ๋“œ before์˜ ์˜ค๋ฅธ์ชฝ์— ์‚ฝ์ž…
void dinsert(DListNode* before, element data) {
    DListNode* newnode = (DListNode*)malloc(sizeof(DListNode));
    newnode->data = data;
    newnode->llink = before; // (1)
    newnode->rlink = before->rlink; // (2)
    before->rlink->llink = newnode; // (3)
    before->rlink = newnode; // (4)
}

 

 

์‚ญ์ œ์—ฐ์‚ฐ

  1. removed์˜ llink์˜ rlink์™€ removed์˜ rlink์™€ ์—ฐ๊ฒฐํ•œ๋‹ค.
  2. removed์˜ rlink์˜ llink์™€ removed์˜ llink์™€ ์—ฐ๊ฒฐํ•œ๋‹ค.
// ๋…ธ๋“œ removed๋ฅผ ์‚ญ์ œ
void ddelete(DListNode* head, DListNode* removed) {
    if (removed == head) return;
    head->rlink = removed->rlink;
    removed->rlink->llink = removed->llink;
    free(removed);
}

 

 

์ „์ฒด์ฝ”๋“œ

#include <stdio.h>
#include <stdlib.h>

typedef int element;
// ์ด์ค‘ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ๋…ธ๋“œ ํƒ€์ž…
typedef struct DListNode {
    element data;
    struct DListNode* llink;
    struct DListNode* rlink;
}DListNode;
// ์ด์ค‘ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ์ดˆ๊ธฐํ™”
void init(DListNode* phead) {
    phead->llink = phead;
    phead->rlink = phead;
}
// ์ด์ค‘ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ์ƒํƒœ ์ถœ๋ ฅ
void print_dlist(DListNode* phead) {
    DListNode* p;
    for (p = phead->rlink; p != phead; p = p->rlink) {
        printf("<-| |%d| |-> ", p->data);
    }
    printf("\n");
}
// ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ๋…ธ๋“œ before์˜ ์˜ค๋ฅธ์ชฝ์— ์‚ฝ์ž…
void dinsert(DListNode* before, element data) {
    DListNode* newnode = (DListNode*)malloc(sizeof(DListNode));
    newnode->data = data;
    newnode->llink = before;
    newnode->rlink = before->rlink;
    before->rlink->llink = newnode;
    before->rlink = newnode;
}
// ๋…ธ๋“œ removed๋ฅผ ์‚ญ์ œ
void ddelete(DListNode* head, DListNode* removed) {
    if (removed == head) return;
    head->rlink = removed->rlink;
    removed->rlink->llink = removed->llink;
    free(removed);
}
// ๋ฉ”์ธ
int main(void) {
    DListNode* head = (DListNode*)malloc(sizeof(DListNode));
    init(head);
    printf("์ถ”๊ฐ€ ๋‹จ๊ณ„\n");
    for (int i = 0; i < 5; i++) {
        dinsert(head, i);
        print_dlist(head);
    }
    printf("\n์‚ญ์ œ ๋‹จ๊ณ„\n");
    for (int i = 0; i < 5; i++) {
        print_dlist(head);
        ddelete(head, head->rlink);
    }
    free(head);
    return 0;
}
728x90
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
'๐Ÿ“š ์ž๋ฃŒ๊ตฌ์กฐ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฆฌ์ŠคํŠธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [์ž๋ฃŒ๊ตฌ์กฐ] ์›ํ˜• ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ(Circular Linked List)๋ž€?
  • [์ž๋ฃŒ๊ตฌ์กฐ] ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ(Linked List)๋ž€?
  • [์ž๋ฃŒ๊ตฌ์กฐ] ๋ฆฌ์ŠคํŠธ(List)๋ž€?
  • ๋ฐฐ์—ด(Array)๊ณผ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ(Linked List)๋ž€?
juno1105
juno1105
๊ณต๋ถ€ํ•˜๋Š” ๊ฒธ ํฌํด ๋ธ”๋กœ๊ทธ
  • juno1105
    @juno1105
    juno1105
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (89)
      • ๐Ÿ’ฌ ์ž์œ  (3)
      • ๐Ÿ“– ์–ดํ•™ ๊ณต๋ถ€ (0)
      • ๐Ÿ“” ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ (4)
      • ๐Ÿ›  ํ”„๋กœ๊ทธ๋žจ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ๋ฒ• (1)
      • ๐Ÿ“š ์ž๋ฃŒ๊ตฌ์กฐ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (53)
        • ์Šคํƒ (4)
        • ํ (4)
        • ์ •๋ ฌ ๋ฐ ํƒ์ƒ‰ (17)
        • ๋ฆฌ์ŠคํŠธ (5)
        • ํ•ด์‹œ (1)
        • ํŠธ๋ฆฌ (8)
        • ํž™ (2)
        • ๊ทธ๋ž˜ํ”„ (12)
      • ๐Ÿ’ป ์ปดํ“จํ„ฐ ๊ตฌ์กฐ (0)
      • ๐Ÿšฅ ๋…ผ๋ฆฌํšŒ๋กœ (8)
      • ๐Ÿ”ฐ ๋ฐฑ์ค€ (20)
        • ํ, ์Šคํƒ, ๋ฑ (0)
        • DFS ์™€ BFS (3)
        • ๊ทธ๋ฆฌ๋”” (0)
        • ๋™์ ๊ณ„ํš๋ฒ• 1 (16)
        • ๋™์ ๊ณ„ํš๋ฒ• 2 (0)
        • ์ตœ๋‹จ ๊ฒฝ๋กœ (0)
        • ํŠธ๋ฆฌ (0)
        • ๋ฐฑํŠธ๋ž˜ํ‚น (0)
        • ์œ ๋‹ˆ์˜จ ํŒŒ์ธ๋“œ (0)
        • ์ง‘ํ•ฉ๊ณผ ๋งต (1)
      • ๐ŸŒˆ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (0)
      • ๐Ÿ“ฑ ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ (0)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

    • โœจ์ž๋ฃŒ๊ตฌ์กฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ปค๋ฆฌํ˜๋Ÿผโœจ
  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ํ† ์ต 900
    ์‹œ๊ฐ„๋ณต์žก๋„
    ์ •๋ ฌ
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ํ† ์ต 950์ 
    ํ† ์ต 920์ 
    ํ† ์ต 900์ 
    ์ตœ๋‹จ๊ฒฝ๋กœ
    ์ •๋ ฌ ์ตœ์„ ์˜ ๊ฒฝ์šฐ
    ๊ทธ๋ž˜ํ”„ํƒ์ƒ‰
    ํ† ์ต 900์ ๋Œ€
    ํ† ์ต
    ๋น…์˜คํ‘œ๊ธฐ๋ฒ•
    ์ •๋ ฌ ์ตœ์•…์˜ ๊ฒฝ์šฐ
    ํ† ์ต 910์ 
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
juno1105
[์ž๋ฃŒ๊ตฌ์กฐ] ์ด์ค‘ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ(Doubly Linked List)๋ž€?
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”