반응형
ADT[추상화 데이터형]의 구현
:언어나 시스템의 세부적인것을 따지지 않고, 데이터형을 일반적인 형식으로 서술
Stack의 구현
: 여러 개의 항목을 저장 [컨테이너]
- 빈 스텍 생성가능
- 스텍의 꼭대기에 항목추가 [push]
- 스텍의 꼭대기에 항목삭제 [pop]
- 스텍이 가득 차있는지 검사
- 스텍이 비어있는지 검사
public 멤버 함수: 인터페이스를 제공하는 클래스와 대응
private 데이터 멤버: 스텍 데이터의 저장
private 부분의 데이터 저장 방법 선택[배열, 동적배열, 링크드 리스트 등]
public 부분에서는 알 수 없다.
//stack.h
#ifndef STACK_H_
#define STACK_H_
typedef unsigned long Item;
class Stack
{
private:
enum { MAX = 10 }; //클래스용 상수
Item items[MAX]; //스택 항목들을 저장
int top; //스택의 꼭대기 항목을 나타냄
public:
Stack();
bool isempty() const;
bool isfull() const;
//push()는 스택이 가득 차있으면 flase, 아니면 true
bool push(const Item& item); //스택에 항목을 추가
//pop()은 스택이 비어있으면 false, 아니면 true
bool pop(Item& item); //꼭대기 항목을 꺼내 item에 넣는다.
};
#endif
//stack.cpp
#include "stack.h"
Stack::Stack() //비어있는 스택의 생성
{
top = 0;
}
bool Stack::isempty() const
{
return top == 0;
}
bool Stack::isfull() const
{
return top == MAX;
}
bool Stack::push(const Item& item)
{
if (top < MAX)
{
items[top++] = item;
return true;
}
else
return false;
}
bool Stack::pop(Item& item)
{
if (top > 0)
{
item = items[--top];
return true;
}
else
return false;
}
//stacker.cpp
#include <iostream>
#include <cctype>
#include "stack.h"
int main()
{
using namespace std;
Stack st; //비어있는 스택 생성
char ch;
unsigned long po;
cout << "주문서를 추가하려면 A, 주문서를 처리하려면 P, \n"
<< "종료하려면 Q를 입력하십시오. \n";
while (cin >> ch && toupper(ch) != 'Q')
{
while (cin.get() != '\n')
continue;
if (!isalpha(ch))
{
cout << '\a';
continue;
}
switch (ch)
{
case 'A':
case 'a':cout << "추가할 주문서의 번호를 입력하십시오: ";
cin >> po;
if (st.isfull())
cout << "스탭이 가득 차 있습니다.\n";
else
st.push(po);
break;
case 'P':
case 'p':if (st.isempty())
cout << "스택이 비어있습니다. \n";
else {
st.pop(po);
cout << '#' << po << " 주문서를 처리했습니다.\n";
}
break;
}
cout << "주문서를 추가하려면 A, 주문서를 처리하려면 P,\n"
<<" 종료하려면 Q를 입력하십시오. \n";
}
cout << "프로그램을 종료합니다.\n";
return 0;
}
반응형
'Programming > C++ 2' 카테고리의 다른 글
[C++ 연습문제] 10장. 객체와 클래스 (1) (0) | 2021.04.13 |
---|---|
[C++ 요약] 10장. 객체와 클래스 (0) | 2021.04.12 |
[C++] 10장-5. 객체 배열 (0) | 2021.04.11 |
[C++] 10장-4. this 포인터 (0) | 2021.04.11 |
[C++] 10장-3. 클래스 생성자와 파괴자 (0) | 2021.04.11 |