관리 메뉴

Kim's Programming

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

Programming/Data Structure

[C++/템플릿으로 만드는 자료구조] 스택(Stack)

Programmer. 2016. 1. 18. 21:09

C++/템플릿으로 제작한 스택 소스입니다. 사용시에는 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
125
126
127
128
129
130
template<typename Type>
class Node
{
public:
    Type item;
    Node<Type> *Link;
};
 
template<typename Type>
class Stack
{
private:
    Node<Type> *Header;
public:
    Stack();
    ~Stack();
    bool Is_Empty();
    void Push(Type Item);
    void POP();
    Type Peek();
    void Printing();
    void Counting();
};
 
template<typename Type>
Stack<Type>::Stack()
{
    this->Header = NULL;
}
template<typename Type>
Stack<Type>::~Stack()
{
 
}
 
template<typename Type>
bool Stack<Type>::Is_Empty()
{
    if (this->Header == NULL)
    {
        printf("Stack is Empty\n");
        return true;
    }
    printf("Stack is not Empty\n");
    return false;
}
 
template<typename Type>
void Stack<Type>::Push(Type Item)
{
    Node<Type> *New = new Node<Type>;
    if (this->Is_Empty())
    {
        this->Header = New;
        New->item = Item;
        New->Link = NULL;
        return;
    }
    else
    {
        New->item = Item;
        New->Link = this->Header;
        this->Header = New;
        return;
    }
}
 
template<typename Type>
void Stack<Type>::POP()
{
    if (this->Is_Empty())
    {
        return;
    }
    Node<Type> *Cur = this->Header;
    this->Header = Cur->Link;
    delete(Cur);
}
 
template<typename Type>
Type Stack<Type>::Peek()
{
    if (this->Is_Empty())
    {
        return 0;
    }
    Node<Type> *Cur = NULL;
    Node<Type> *Top = this->Header;
    int Return_Value;
    while (Top->Link != NULL)
    {
        Cur = Top;
        Top = Top->Link;
    }
    Return_Value = Top->item;
 
    Cur->Link = NULL;
    delete(Top);
    return Return_Value;
}
 
template<typename Type>
void Stack<Type>::Printing()
{
    if (Is_Empty())
    {
        return;
    }
    Node<Type> *Cur = this->Header;
    std::cout << "(Top ->)";
    while (Cur != NULL)
    {
        std::cout << Cur->item << "->";
        Cur = Cur->Link;
    }
    std::cout << "(<-Bottom)" << std::endl;
}
 
template<typename Type>
void Stack<Type>::Counting()
{
    Node<Type> *Cur = this->Header;
    int count = 0;
    while (Cur != NULL)
    {
        count++;
        Cur = Cur->Link;
    }
    std::cout << "this Stack has " << count << " Nodes" << std::endl;
}
cs

Stack은 STL으로 사용시엔 stack을 인클루드 하여 사용하게 됩니다.


같이보기