ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [게임알고리즘] 3-1강 링크 리스트
    [DSU] 게임알고리즘 2026. 3. 22. 10:58
    728x90

    문자열을 추가, 삭제 가능한 링크리스트를 구현

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
     
    struct Node
    {
        const void* data;
        Node* prev;
    };
     
    Node* last = NULL;
     
    int countNode();
     
    void addNode(const void* data)
    {
        Node* n = new Node;
        n->data = data;
        n->prev = last;
        
        last = n;
    }
        
    void addNode(int index, const void* data)
    {
        int i = countNode() - 1;
        if( index==i )
        {
            addNode(data);
            return;
        }
        for(Node* p = last; p; p = p->prev, i--)
        {
            if(i==index)
            {
                Node* n = new Node;
                n->data = data;
                n->prev = p->prev;
                
                p->prev = n;
                return;
            }
        }
        printf("failed to insert node\n");
    }
        
    void delNode(int index)
    {
        int i = countNode() - 1;
        for(Node* p = last,* back = NULL; p; 
            back = p, p = p->prev, i--)
        {
            if(i==index)
            {
                if( back )
                    back->prev = p->prev;
                else// if( last==NULL )
                    last = p->prev;
                delete p;
                return;
            }
        }
    }
     
    #if 0
     
    bool delNode_(const void* data)
    {
        for(Node* p = last, * back = NULL; p;
            back = p, p = p->prev)
        {
            if( p->data==data )
            {
                if( back )
                    back->prev = p->prev;
                else
                    last = p->prev;
                return true;
            }
        }
        return false;
    }
    void delNode(const void* data)
    {
        while(delNode_(data));
    }
     
    #else
     
    void delNode(const void* data)
    {
        for(Node* p = last, * back = NULL; p;)
            //back = p, p = p->prev)
        {
            if( p->data==data )
            {
                if( back )
                    back->prev = p->prev;
                else
                    last = p->prev;
                //back = back;// 000
                Node* bk = p->prev;// 111
                delete p;
                p = bk;
            }
            else
            {
                back = p;// 000
                p = p->prev;// 111
            }
        }
    }
    #endif
        
    void delAllNode()
    {
        for(Node* p = last; p; )
        {
            Node* bk = p->prev;
            delete p;
            p = bk;
        }
        last = NULL;
    }
     
    const void* atNode(int index)
    {
        int i = countNode() - 1;
        for(Node* p = last; p; p = p->prev, i--)
        {
            if( i==index )
                return p->data;
        }
        return NULL;
    }
     
    int countNode()
    {
        int i=0;
        for(Node* p = last; p; p = p->prev, i++);
        return i;
    }
     
    int main() {
        
        const char* str[] = { "Hi""world""!!" };
        for(int i=0; i<3; i++)
            addNode(str[i]);
            
        addNode(0, str[0]);
     
        //delNode(2);
        delNode(str[0]);
        
        int count = countNode();
        for(int i=0; i<count; i++)
        {
            printf("nm[%d].data[%s]\n", i, (const char*)atNode(i));
        }
     
        return 0;
    }
    cs

     

    매일매일 열심히 게임개발하고 있습니다

Designed by Tistory.