반응형
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 |
반응형
'Applied > 자료구조' 카테고리의 다른 글
트리(Tree) 용어 (2) (0) | 2016.05.01 |
---|---|
트리(Tree) 용어 (1) (0) | 2016.04.30 |
배열 기반 Bag 자료구조 개념 (0) | 2016.04.21 |
이중 연결 리스트 기반 데크(Dequeue) 소스 코드 (0) | 2016.04.13 |
이중 연결 리스트 기반 데크(Dequeue) 개념 (0) | 2016.04.13 |