반응형
5.6> 문제 5번의 MyIntStack를 수정하여 다음과 같이 선언하였다. 스택에 저장할 수 있는 정수의 최대 개수는 생성자에서 주어지고 size 멤버에 유지한다. MyIntStack 클래스를 작성하라.
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 | #include <iostream> using namespace std; class MyIntStack{ private: int *p; //스택 메모리로 사용할 포인터 int size; //스택의 최대 크기 int tos; //스택의 탑을 가리키는 인덱스 public: MyIntStack(); MyIntStack(int size); MyIntStack(MyIntStack& s); ~MyIntStack(); bool push(int n); //정수 n을 스택에 푸쉬 꽉차있으면 false 아니면 true bool pop(int &n); //스택의 탑에 있는 값을 n에 pop 한다 스택이 비었으면 false 아니면 true }; MyIntStack::MyIntStack(){size=1; p=new int[size]; tos=-1;} //기본 생성자 정의 tos=-1은 empty state를 나타낸다. MyIntStack::MyIntStack(int size){this->size=size; p=new int[size]; tos=-1;} //인자 size가 동적 배열의 크기를 결정한다. //tos=-1이 empty 를 뜻하는 이유는 배열의 인덱스가 0부터 시작하기 때문이다. MyIntStack::MyIntStack(MyIntStack& s){this->size=s.size; p=new int[s.size]; //깊은 복사를 위해 새로운 동적메모리를 힙에서 size만큼 받아온다. for(int i=0;i<s.size;i++){ (this->p)[i]=(s.p)[i]; } //포인터에 할당된 동적메모리의 경우 깊은 복사를 위해 //새로운 할당을 해준 후 배열의 원소를 일일히 복사하여 넣어준다. this->tos=s.tos;} MyIntStack::~MyIntStack(){ if(this->p) //p에 주소값이 NULL이 아니면 delete []p; //p가 가리키는 동적메모리 반환 } bool MyIntStack::push(int n){ if((tos+1)==size) //index는0부터 시작해서 1을 더해서 검사함 return false; else{ p[++tos]=n; //증가시키고 대입해준다. return true; } } bool MyIntStack::pop(int &n){ if(tos==-1) //empty면 return false; else{ n=p[tos--]; //대입하고 감소시킨다. return true; } } int main(void){ MyIntStack a(10); //size 10짜리 마이인트스택 a a.push(10); //a에 10 삽입 pos=0 a.push(20);//a에 20 삽입 pos=1 MyIntStack b=a; //MyIntStack b(a); 와 같다. //객체로 초기화 하여 객체 생성,복사생성자 실행됨(깊은복사) b.push(30); //b에 30 삽입 pos=2 int n; a.pop(n); //20 pop, pos=0이됨 cout<<"스택 a에서 팝한 값 "<<n<<endl; b.pop(n); //30 pop, pos=1이됨 cout<<"스택 b에서 팝한 값 "<<n<<endl; b.pop(n); //20 pop, pos=0이됨 cout<<"스택 b에서 팝한 값 "<<n<<endl; b.pop(n); //10 pop, pos=-1이됨 cout<<"스택 b에서 팝한 값 "<<n<<endl; cout<<b.pop(n)<<endl; //pos=-1, empty state 라서 0 리턴 return 0; } | cs |
반응형
'컴퓨터 & 프로그래밍 & 전자공학 > C++' 카테고리의 다른 글
Book 클래스 (1) | 2017.11.09 |
---|---|
Accumulator 클래스 (0) | 2017.11.09 |
포인터의 증감 (0) | 2017.11.09 |
변수와 포인터와 참조 (0) | 2017.11.08 |
float와 double (0) | 2017.11.05 |