본문 바로가기
자료구조/C++ 자료구조

Stack

by 후야- 2024. 6. 27.
Stack

1. 가시성 확보하기
2. 클래스 선언 후 안에 값들 선언하기
3. 스택 생성자 만든 후 스택 값 초기화
4. 스택 소멸자 만들기
5. push, pop, print, clear 구현하기
#include <iostream>

using std::cout;
using std::cin;
using std::endl;

class Stack
{
private:
	int* arr;     // 동적 메모리의 주소
	int top;
	int capacity; // 배열의 최대 용량

public:
	Stack(int size)    // 스택 초기화
	{
		arr = (int*)malloc(sizeof(int) * size);
		top = -1;
		capacity = size;
	}
	~Stack()          // 동적할당 해제
	{
		free(arr);
	}

	void push(int element)
	{
		if (top == capacity - 1)
		{
			cout << "overflow" << endl;
			return;
		}
		arr[++top] = element;
	}

	int pop()
	{
		if (top == -1)
			return -1;
		return arr[top--];
	}

	void Print()
	{
		if (top == -1)
		{
			cout << "스택이 비어있습니다.\n" << endl;
			return;
		}
		for (int i = top; i >= 0; i--)
			cout << arr[i] << " ";
		cout << endl;
	}

	void Clear()
	{
		if (top == -1)
			cout << "스택이 비어있습니다." << endl;
		else
			top = -1;
	}
};

int PrintMenu();

int main(void)
{
	int choice, value = 0;       // 메뉴 선택
	Stack stk(5);
	while ((choice = PrintMenu()) != 0)
	{
		switch (choice)
		{
		case 1:
			cin >> value;
			stk.push(value);
			break;
		case 2:
			value = stk.pop();
			if (value == -1)
				cout << "underflow" << endl;
			else
				cout << "pop : " << value << endl;
			break;
		case 3:
			stk.Print();
			break;
		case 4:
			stk.Clear();
			break;
		}
		system("pause");
	}
	cout << "종료 " << endl;
	return 0;
}

int PrintMenu()
{
	int choice;
	system("cls");    // 화면 지우기
	cout << "\n\n====================== stack ====================== \n\n";
	cout << "[1] push [2] pop [3] print [4] clear [0] exit \n\n";
	cout << "> ";

	cin >> choice;
	return choice;
}

'자료구조 > C++ 자료구조' 카테고리의 다른 글

Queue  (0) 2024.06.27
[자료구조] 벡터 (vector)  (0) 2024.03.01
[자료구조] 배열과 리스트  (1) 2024.02.29
[자료구조] 자료구조란 무엇인가?  (0) 2024.02.29