반응형



[ 구조체(C) 및 클래스(C++) 두가지 방식으로 구현하는 연결 리스트 ] 




두 노드의 연결은 아래 그림과 같은 방식으로 이루어 진다.


이 과정을 소스코드로 표현 하면 다음과 같다.


[ 구조체를 통한 표현 ]


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
#include <stdio.h>
 
typedef struct Node
{
 
    int data;
    Node *next;
 
}node;
 
int main()
{
    node node1;
    node node2;
 
    node2.data = 123;
 
    node1.next = &node2;
 
    printf("(node1.next)->data :: %d \n", (node1.next)->data);
    // 이때 node1.next->data도 같은 의미이다. 하지만 ( )를 통한 오해를 할 수 있는 경우를 줄이는 것을 추천한다.
 
    return 0;
}
 
 
Crocus



[ 결과 화면 ]




[ 클래스를 통한 표현 ]





클래스는 private 선언이 되는순간 클래스 내부에서 함수를 통하여 private 접근 혹은 


private 선언이 아닌 public 선언으로 바꾸지 않는 한 외부에서 접근이 불가 하게된다.



따라서 클래스는 다음과 같이 제작한다.


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
#include <iostream>
 
using namespace std;
 
class node
{
 
private:
    int data;   // 데이터를 담을 공간
    node *next; // 연결의 도구
 
public:
    void inputData(node *_node)
    {
        _node->data = 234;
    }
 
    void doNext(node *node_1, node *node_2)
    {
        node_1->next = node_2;
    }
 
    void see(node *_node)
    {
        cout << _node->next->data << endl;
    }
 
}; // public로 하면 조금 더 편하지만, 코드의 보안을 높이기 위해서는 private를 이용하는것을 습관화 한다.
 
 
int main()
{
    node node1;
    node node2;
 
    node2.inputData(&node2);
 
    node1.doNext(&node1,&node2); // 서로의 data와 *next는 int main 즉, 외부에서 다룰 수 없으므로
                                 // 주소값과 함께 클래스 내부로 가져간다.
    node1.see(&node1);
 
    return 0;
}
 
 
Crocus




구조체에 비해서 번거롭지 않다고하면 거짓말이겠지만, 


클래스는 객체지향을 위한 중요한 매개체이므로 클래스를 다루는 법은 꼭 알아야 한다.



반응형

'Applied > 자료구조' 카테고리의 다른 글

자료구조 코딩 시 주의사항  (0) 2016.05.03
연결 리스트(Linked List) 개념 (3)  (0) 2016.05.03
연결 리스트(Linked List) 개념 (1)  (0) 2016.05.03
트리(Tree) 용어 (2)  (0) 2016.05.01
트리(Tree) 용어 (1)  (0) 2016.04.30