1. 문제

 

6. 다음 AbstractStack은 정수 스택 클래스로서 추상 클래스이다.

 

이를 상속받아 정수를 푸시, 팝하는 IntStack 클래스를 만들고 사용 사례를 보여라.

 

 

2. 결과

 

 

3. 코드

#include <iostream>
#include <string>
using namespace std;

class AbstractStack {
public :
	virtual bool push(int n) = 0;
	virtual bool pop(int& n) = 0;
	virtual int size() = 0;
};

class IntStack : public AbstractStack {
	int* stack;
	int top;
	int max;
public :
	IntStack(int n){ stack = new int[n]; max = n;  top=-1; }
	bool push(int n) {
		if( top == max ) return false;
		else {
		top++;
		stack[top] = n;
		return true;
		}
	}
	bool pop(int& n) {
		if( top < 0 ) return false;
		else {
		n = stack[top];
		top--;
		return true;
		}
	}
	int size() {
		return top+1;
	}
};

int main() {
	IntStack intstack(50);
	int re;

	intstack.push(10);
	intstack.push(20);
	intstack.push(30);
	intstack.push(40);
	cout << "현재 원소 개수 : " << intstack.size() << "개" << endl;
	intstack.pop(re); 
	cout << "pop : " << re << endl;
	intstack.pop(re); 
	cout << "pop : " << re << endl;
	intstack.pop(re); 
	cout << "pop : " << re << endl;
	cout << "현재 원소 개수 : " << intstack.size() << "개" << endl;
}

 

4. 설명

 

스택은 후입선출의 구조로서 가장 나중에 들어온 값이 가장 먼저 나가는 형태입니다.

 

main 함수를 보면 push로 10, 20, 30, 40을 순서대로 스택에 넣었습니다.

 

그 후 pop을 하면 가장 나중에 들어온 순서대로 40, 30, 20이 나간 후 현재 원소 개수를 size() 메소드로 알아보면 1개가 남은 것을 알 수 있습니다.

 

+ Recent posts