728x90
반응형
1. Stack이란?
- 후입선출(Last In First Out) 즉 나중에 들어간 데이터가 제일 먼저 나오는 성질을 가지는 자료구조이다.
- 시간복잡도 : O(1)
2. Stack구현
Push(int value) : value를 스택의 최상단에 삽입
Pop() : 최상단의 원소를 스택에서 제거. 만약 스택이 비었다면 프로그램 종료
Top() : 스택의 최상위 원소를 반환. 만약 스택이 미었다면 프로그램 종료
Size() : 스택의 원소의 갯수를 반환.
isEmpty() : 스택이 비어있는지 여부를 반환.
#include <iostream>
#include <cstdlib>
using namespace std;
class Stack{
private:
int *arr;
int top;
int capacity;
public:
Stack(int size);
~Stack();
void Push(int value);
void Pop();
int Top();
int Size();
bool IsEmpty();
bool IsFull();
};
Stack::Stack(int size) {
arr = new int[size];
capacity = size;
top = -1;
}
Stack::~Stack() {
delete[] arr;
}
void Stack::Push(int value) {
if(IsFull()) {
cout << "Stack에 공간이 부족합니다." << "\n";
exit(EXIT_FAILURE);
}
cout << "Push : " << value << "\n";
arr[++top] = value;
}
void Stack::Pop() {
if(IsEmpty()) {
cout << "Stack에 값이 없습니다." << "\n";
exit(EXIT_FAILURE);
}
cout << "Pop : " << Top() << "\n";
arr[top--];
}
int Stack::Top() {
if(!IsEmpty()) {
return arr[top];
}
else {
cout << "Stack이 비었습니다." << "\n";
exit(EXIT_FAILURE);
}
}
int Stack::Size() {
return top+1;
}
bool Stack::IsEmpty() {
return top == -1;
}
bool Stack::IsFull() {
return top == capacity-1;
}
void menuPrint() {
cout << "==============Stack===============" << "\n";
cout << "[1] Push" << "\n";
cout << "[2] Pop" << "\n";
cout << "[3] Top" << "\n";
cout << "[4] Size" << "\n";
cout << "[5] Empty" << "\n";
cout << "[Exit] Exit(1~5제외 아무키나 누르세요)" << "\n";
}
int main() {
int size;
cout << "Stack의 크기를 할당하세요 : ";
cin >> size;
cout << endl;
Stack sta(size);
while(true) {
menuPrint();
char cmd;
cin >> cmd;
if(cmd == '1') {
int value;
cout << "Push할 값 입력 : ";
cin >> value;
sta.Push(value);
}
else if(cmd == '2') {
sta.Pop();
}
else if(cmd == '3') {
cout << "Top : " << sta.Top() << "\n";
}
else if(cmd == '4') {
cout << sta.Size() << "\n";
}
else if(cmd == '5') {
cout << sta.IsEmpty() << "\n";
}
else {
exit(0);
}
}
}
CS 지식을 공부하고 기록하는 개인 공부 블로그입니다.
내용 중 틀린 부분 피드백 혹은 궁금한 점이 있으면 댓글로 남겨주시면 참고 및 답변 달아드리겠습니다🧐
728x90
반응형
'Computer Science > 자료구조' 카테고리의 다른 글
[자료구조] Linked list를 활용한 이진 트리 구현 :: C++ (1) | 2024.01.11 |
---|---|
[자료구조] Tree & Binary Tree (1) | 2024.01.11 |
[자료구조] Doubly Linked List / 이중 연결 리스트 구현 :: C++ (0) | 2023.12.15 |
[자료구조] Singly Linked List/단일 연결 리스트 & 단일 연결 리스트 구현 :: C++ (0) | 2023.12.12 |
[자료구조] Queue/큐 & 배열을 통한 큐 구현 :: C++ (0) | 2023.12.10 |