본문 바로가기

Programming/C++ 2

[C++] 10장-7. 추상화 데이터형

반응형

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;
}​

반응형