반응형



체인 노드를 이용한 연결 리스트 자료구조입니다.


삭제 과정을 따로 구현해두지 않았습니다.


이 코드를 보고 생성, 삽입, 출력을 이해하시고 삭제를 구현해보시면


체인 노드에 대해 이해를 할 수 있을거라 확신합니다.



삭제 코드가 너무 어렵고 알고싶다면 댓글에 메일 주소를 알려주세요.



코드는 보고 이해하는것과 직접 해보는 것은 천지차이이고,


코드를 보고 이해하였다고해서 자신이 직접 제작 할 수 있는 코드가 아님을 주의하시기 바랍니다.


이 습관이 잘못된다면 당신은 자신만의 코드를 만들기 어려워집니다.


혼자 힘들어하고 고민해가며 얻어가는 코드가 당신의 코드입니다.



  
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
#include <iostream>
 
using namespace std;
 
class ChainNode {
 
    friend class Chain;
 
private:
    int data;
    ChainNode *link;
 
public:
    ChainNode(int value = 0, ChainNode *_link = NULL)
    {
        data = value;
        link = _link;
    }
 
};
 
class Chain {
 
private:
    ChainNode *first;
    ChainNode *second;
 
public:
    Chain();
    void makeChainNode(int value);
    int insertChainNode(int value, int pos);
    void print();
    
};
 
Chain::Chain() // 생성자
{
    first = NULL;
    second = NULL;
}
 
void Chain::makeChainNode(int value)
{
    if (first == NULL)
    {
        second = new ChainNode(0, NULL); // 체인노드 다음 것을 0,0으로 초기화
        first = new ChainNode(value, second); // 첫 체인노드는 value값 대입, second로 link
    }
 
    else
    {
        ChainNode *tmp;
 
        second->data = value;
 
        tmp = new ChainNode(0,NULL); // 새 노드는 값만 가지고 링크는 NULL
 
        second->link = tmp; // 이전에 가리키던 second의 link가 새로 생긴 second의 link 가리키도록
        second = tmp;
    }
}
 
int Chain::insertChainNode(int value, int pos)
{
    ChainNode *cur = first;
    ChainNode *tmp;
    int count = 0;
 
    while (cur->link != NULL) // 총 개수 확인
    {
        cur = cur->link;
        count++;
    }
 
    cur = first;
    
    if (count < pos)
    {
        cout << "노드가 존재하지 않습니다." << endl;
        return 0;
    }
    else if (count == pos)
    {
        cout << "<< 1. 노드 생성 >> 을 이용해 주세요" << endl;
        return 0;
    }
    for (int i = 1; i < pos; i++)
    {
        cur = cur->link;
    }
 
    tmp = new ChainNode(value, cur->link);
    cur->link = tmp;
    return 1;
}
 
void Chain::print()
{
    ChainNode *cur = first;
    while (cur->link != NULL)
    {
        cout << cur->data << " ";
        cur = cur->link;
    }
    cout << endl;
}
 
int main()
{
    Chain a; 
    int value;
    int num;
    int pos;
 
    cout << "------------ Chain Node Program ------------" << endl;
    while(1)
    {
        cout << "1. 노드 생성 2. 노드 삽입 3. 노드 확인 4. 노드 삭제 5. 종료" << endl;
 
        cout << "번호 입력 :: "cin >> num;
 
        switch(num)
        {
            case 1:
                cout << "노드 값 입력 :: "cin >> value;
                a.makeChainNode(value);
                break;
 
            case 2:
                cout << "몇 번째 노드 다음 삽입? :: "cin >> pos;
                cout << "노드 값 입력 :: "cin >> value;
                a.insertChainNode(value,pos);
                break;
            case 3:
                a.print();
                break;
 
            case 4:
                /*
                * 삭제 과정은 이 코드를 사용하는 사용자 몫
                * 삭제 구현 :: 마지막 노드부터 삭제, 첫 노드부터 삭제, 특정 노드 삭제
                */
                break;
 
            case 5:
                return 0;
                break;
        }
    }
 
// This source code Copyright is Crocus 
//                                             Do you want to see more contents? click here >> 

Crocus


반응형