1. 문제

 

5. 다음과 같이 선언된 정수를 저장하는 스택 클래스 MyIntStack을 구현하라.

 

MyIntStack 스택에 저장할 수 있는 정수의 최대 개수는 10이다.

 

MyIntStack 클래스를 활용하는 코드와 실행 결과는 다음과 같다.

 

 

2. 결과

 

 

 

3. 코드

 

#include <iostream>
using namespace std;

class MyIntStack {
	int p[10];
	int tos;
public : 
	MyIntStack(){ tos = 0; }
	bool push(int n);
	bool pop(int &n);
};
bool MyIntStack::push(int n) {
	if( tos == 10 ) 
		return false;
	else {
		p[tos] = n;
		tos++;
		return true;
	}
}
bool MyIntStack::pop(int &n) {
	tos--;
	if( tos == -1 )
		return false;
	else {
		n = p[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;
}

 

 

4. 설명

 

Stack은 선입선출의 구조로 가장 나중에 들어온 데이터가 가장 먼저 나갑니다.

 

Stack을 예로 들어 설명하면 책을 쌓는 것과 유사하다고 할 수 있습니다. 

 

책(데이터)이 쌓여서 만들어진 책 더미의서 책(데이터)을 추가할려면 가장 위(top)에다가 책을 추가합니다.

 

여기서 가장 위 top(높이)를 저장하고 있는 값이 멤버 변수 tos 입니다.

 

 

※ 배열의 인덱스는 0부터 시작하므로 클래스 MyIntStack의 생성자에서 tos = -1로 초기화 해줍니다.

 

+ Recent posts