관리 메뉴

Kim's Programming

[C++/템플릿으로 만드는 자료구조] 덱(Deque) 본문

Programming/Data Structure

[C++/템플릿으로 만드는 자료구조] 덱(Deque)

Programmer. 2016. 1. 18. 21:16

C++/템플릿으로 만든 덱(Deque)입니다. iostream을 인클루드해야 이용할 수 있습니다.



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
template <typename Type>
class Node
{
public:
    Type Item;
    Node<Type> *Prev;
    Node<Type> *Next;
};
 
template <typename Type>
class Deque
{
private:
    Node<Type> *header;
    Node<Type> *tailer;
 
public:
    Deque();
    ~Deque();
    void Input_Head(Type Item);
    void Input_Tail(Type Item);
    Type Output_Head();
    Type Output_tail();
    void printing();
};
 
template<typename Type>
Deque<Type>::Deque()
{
    this->header = NULL;
    this->tailer = NULL;
}
 
template<typename Type>
Deque<Type>::~Deque()
{}
 
template<typename Type>
void Deque<Type>::Input_Head(Type Item)
{
    Node<Type> *New = new Node<Type>;
    if (this->header == NULL)
    {
        this->header = New;
        this->tailer = New;
        New->Item = Item;
        New->Next = NULL;
        New->Prev = NULL;
        return;
    }
    this->header->Prev = New;
    New->Next = this->header;
    this->header = New;
    New->Item = Item;
    New->Prev = NULL;
}
 
template<typename Type>
void Deque<Type>::Input_Tail(Type Item)
{
    Node<Type> *New = new Node<Type>;
    if (this->tailer == NULL)
    {
        this->header = New;
        this->tailer = New;
        New->Item = Item;
        New->Next = NULL;
        New->Prev = NULL;
        return;
    }
    New->Item = Item;
    this->tailer->Next = New;
    New->Prev = this->tailer;
    this->tailer = New;
    New->Next = NULL;
}
 
template<typename Type>
Type Deque<Type>::Output_Head()
{
    if (this->header == NULL)
    {
        printf("The Deque is empty\n");
        return 0;
    }
    int return_value;
    Node<Type> *Cur = NULL;
    return_value = this->header->Item;
    this->header->Next->Prev = NULL;
    Cur = this->header;
    this->header = this->header->Next;
    delete(Cur);
    return return_value;
}
 
template<typename Type>
Type Deque<Type>::Output_tail()
{
    if (this->tailer == NULL)
    {
        printf("The Deque is empty\n");
        return 0;
    }
    int return_value = 0;
    Node<Type> *Cur = NULL;
    return_value = this->tailer->Item;
    this->tailer->Prev->Next = NULL;
    Cur = this->tailer;
    this->tailer = this->tailer->Prev;
    delete(Cur);
    return return_value;
}
 
template<typename Type>
void Deque<Type>::printing()
{
    Node<Type> *Cur = this->header;
    while (Cur != NULL)
    {
        std::cout << Cur->Item << " ";
        Cur = Cur->Next;
    }
    std::cout << std::endl;
}
cs


덱(Deque)는 STL에서 이용시에 deque를 인클루드하여 이용하게됩니다.


같이보기