반응형
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
154
155
156
157
158
159
160
161
162
163
164
165
166
//자료구조 컨테이너 클래스, Bag 
 
#include <iostream>
 
using namespace std;
 
class Bag
{
private:
    
    int pos; // 가장 끝 위치 반환 변수
    int *bSize;
public:
    
    Bag();
    ~Bag();
    void init();
    void pop() ;
    void push(int value) ;
    int isEmpty() ;
    int isFull();
    void peek() ;
    void check();
 
};
 
// 생성자
Bag::Bag() 
{
    bSize = new int[10]; // 할당
};
 
// 소멸자
Bag::~Bag() 
    delete[]bSize; 
};
 
// 초기화
void Bag::init() 
{
    pos = 0;
    for (int i = 0; i < 10; i++)
        bSize[i] = -1;
};
 
// 비었는지 확인
int Bag::isEmpty() 
{
    if (bSize[0== -1// 가방이 비었으면 0 리턴
        return 0;
 
    else // 가방이 안비었으면 1리턴
        return 1;
};
 
int Bag::isFull()
{
    if (bSize[9!= -1// 가방이 꽉차면
        return 0;
 
    else
        return 1;
    
}
void Bag::push(int value) 
{
    if (isFull() == 0)
    {
        cout << "가방이 꽉 찼습니다." << endl;
    }
    else
    {
        bSize[pos] = value;
        pos++;
    }
};
void Bag::pop()
{
    if (isEmpty() == 0// 가방에 아무것도 없으면
    {
        cout << "가방이 비었습니다." << endl;
    }
 
    else
    {
        int tmp = bSize[(pos-1)/2]; // push에서 pos+1되있는 상태이니 즉, 0 1 2 -1 -1 -1 -1 -1 ..의 3바로다음 -1을 가리키고 있었다.
        
        for (int i = (pos - 1/ 2; i < 9; i++)
        {
            bSize[i] = bSize[i + 1];
        }
        bSize[9= -1// 마지막 값 -1해주기
        
        pos--// pop했으니 값 -1
 
        cout << "pop한 값 : " <<  tmp << endl
    }
 
};
void Bag::peek() 
{
    if (isEmpty() == 0// 가방에 아무것도 없으면
    {
        cout << "가방이 비었습니다." << endl;
    }
 
    else
 
        cout << "꺼낼 수 있는 값 : " << bSize[(pos-1)/2<< endl;
};
void Bag::check()
{
    cout << "현재 bag 상태 : ";
    for (int i = 0; i < 10; i++cout << bSize[i] << " ";
    cout << endl;
}
 
 
int main()
{
    Bag bag; // 객체 생성
    int n, value; // 번호와 push할때 쓸 값
 
    bag.init(); // 초기화
 
    cout << "Class Container :: Bag" << endl;
   
 
    while (1)
    {
        cout << "1. push \n2. pop \n3. peek \n4. check \n5. exit\n";
 
        cin >> n;
 
        switch(n)
        { 
            case 1:
                cout << "push 값 입력 : ";
                cin >> value;
                bag.push(value);
                break;
 
            case 2:
                bag.pop();
                break;
 
            case 3:
                bag.peek();
                break;
 
            case 4:
                bag.check();
                break;
 
            case 5:
                return 0;
 
 
        }
 
    }
    return 0;
}
 
 
Crocus


반응형