자료구조/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;
}