-
명품 C++ 5장 7번C++ 2018. 10. 31. 19:36
7. 다음과 같이 선언된 정수를 저장하는 스택 클래스 MyIntStack을 구현하라. MyIntStack 스택에 저장할 수 있는 정수의 최대 개수는 10이다.
class MyIntStack {int p[10]; // 최대 10개의 정수 저장int tos; // 스택의 꼭대기를 가리키는 인덱스public:MyIntStack();bool push(int n); // 정수 n 푸시. 꽉 차 있으면 false, 아니면 true 리턴bool pop(int &n); // 팝하여 n에 저장. 스택이 비어 있으면 false, 아니면 true 리턴};MyIntStack 클래스를 활용하는 코드와 실행 결과는 다음과 같다.
int main() {MyIntStack a;for (int i = 0; i < 11; ++i) {if (a.push(i)) cout << i << ' ';else cout << endl << i + 1 << " 번째 stack full" << endl;}int n;for (int i = 0; i < 11; ++i) {if (a.pop(n))cout << n << ' ';else cout << endl << i + 1 << " 번째 stack empty";}cout << endl;}소스코드
#include <iostream>using namespace std;class MyIntStack {int p[10]; // 최대 10개의 정수 저장int tos; // 스택의 꼭대기를 가리키는 인덱스public:MyIntStack();bool push(int n); // 정수 n 푸시. 꽉 차 있으면 false, 아니면 true 리턴bool pop(int &n); // 팝하여 n에 저장. 스택이 비어 있으면 false, 아니면 true 리턴};MyIntStack::MyIntStack() {tos = -1;}bool MyIntStack::push(int n) {if (tos == 9) return false;else {++tos;p[tos] = n;return true;}}bool MyIntStack::pop(int& n) {if (tos == (-1)) return false;else {n = p[tos];--tos;return true;}}int main() {MyIntStack a;for (int i = 0; i < 11; ++i) {if (a.push(i)) cout << i << ' ';else cout << endl << i + 1 << " 번째 stack full" << endl;}int n;for (int i = 0; i < 11; ++i) {if (a.pop(n))cout << n << ' ';else cout << endl << i + 1 << " 번째 stack empty";}cout << endl;}실행결과
pop는 리턴타입이 bool이기 때문에 참조에 의한 호출로 n을 공유하여 pop한 값을 출력시켰습니다.
'C++' 카테고리의 다른 글
명품 C++ 5장 9번 (0) 2018.10.31 명품 C++ 5장 8번 (0) 2018.10.31 명품 C++ 5장 6번 (3) 2018.10.31 명품 C++ 5장 5번 (0) 2018.10.31 명품 C++ 5장 4번 (0) 2018.10.31