Hoon222y

DoublyLinkedList 본문

카테고리 없음

DoublyLinkedList

hoon222y 2018. 10. 20. 16:04
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
#include <iostream>
 
using namespace std;
 
struct Node{
    int data;
    char cdata;
    
    Node* prev;
    Node* next;
    
    //초기화
    Node (int data, char cdata) : data(data) , cdata(cdata){
        prev = next = NULL;
    }
    // : data(data), cdata(cdata)로 작성하는 이유는 this 안쓰기 위해서
    // data에 인자로 입력된 data를 넣어준다는 의미 x로 표현하면 더 쉬울듯
    // 아래 초기화 코드와 동일한 기능을 한다.
    /*
    Node(int x, char y){
        this-> data = x;
        this->cdata = y;
        prev = next = NULL;
    }
    */
    Node() {}
};
 
 
struct DoublyLinkedList{
    int size;
    Node* head;
    Node* tail;
    
    DoublyLinkedList(){
        size=0;
        head=tail=NULL;
    }
    
    void insert_Head(int data,char cdata){
        if(head == NULL)
            head= tail = new Node(data,cdata);
        else{
            Node *newNode = new Node(data,cdata);
            newNode->next = head;
            head->prev = newNode;
            head = newNode;
        }
        size++;
    }
    
    void insert_Tail(int data, char cdata){
        if(tail == NULL)
            head = tail = new Node(data,cdata);
        else{
            Node *newNode = new Node(data,cdata);
            newNode-> prev = tail;
            tail-> next = newNode;
            tail = newNode;
        }
        size++;
    }
    
    void delete_Head(){
        if(!size){
            puts("size is Zero. impossible");
            return;
        }
        printf("delete head : %d %c\n" , head->data, head->cdata);
        Node* tempNode = new Node;
        tempNode = head;
        head->next->prev = NULL;
        head = head->next;
        delete tempNode;
        size--;
    }
    void delete_tail() {
        if (!size) {
            puts("불가능합니다.");
            return;
        }
        printf("delete tail : %d, %c\n", tail->data, tail->cdata);
        Node* tempNode = new Node;
        tempNode = tail;
        tail->prev->next = NULL;
        tail = tail->prev;
        delete tempNode;
        size--;
    }
    
    void prinfNode(){
        Node* tempNode = new Node;
        if(!size) puts("노드없음");
        else{
            tempNode = head;
            for(int i=1;i<=size;i++){
                printf("%d 번째 정보 data : %d , cdata : %c\n" , i,tempNode->data, tempNode->cdata);
                tempNode = tempNode->next;
            }
        }
    }
};
 
 
int main(void){
    
    DoublyLinkedList Dll;
    
    Dll.insert_Head(100'a');
    Dll.insert_Head(200,'b');
    Dll.insert_Tail(300'c');
    Dll.insert_Tail(400'd');
    Dll.prinfNode();
    
    Dll.delete_Head();
    Dll.delete_tail();
    Dll.prinfNode();
    
    return 0;
}
cs



Delete_head와 Delete_Tail 에서 Node * tempNode = new Node 의 의미는 그냥 인자없는 Node 초기화를 통해서 생성하고 head와 tail의 위치를 저장해두는 임시 저장소 역할이라고 보면 이해하기 편하다. 


delete할 때는 순서 잘 생각하면서 하는것이 포인트 

Comments