일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 홈 디렉토리
- ECS
- zshrc error
- c++
- char 입력
- docker
- 설치형 SW
- 코드스테이츠
- DevOps
- cli
- 프로세스
- SSAFY입학
- 백준
- comdef
- mysql
- neofetch
- 웹 SW
- 지속적 전달
- 리눅스
- 출력 명령어
- dfs
- Java 입력
- MongoServerSelectionError
- fastify-cli
- 부트캠프
- 수직확장
- ci/cd
- docker context create
- fastify
- OpenSearch
Archives
- Today
- Total
다디와 괴발개발
C++로 스택 (Stack) 구현해보기 본문
스택(Stack) 이란? 입출력이 한 곳으로 제한 되어있는 형태의 자료구조.
LIFO (Last in First OUT, 후입 선출)로, 가장 마지막에 들어간 데이터가 가장 먼저 나온다.
스택에서 가장 중요한 요소는 스택의 현재 위치를 가리키는 '스택 포인터(SP)' 라고 할 수 있다.
스택 포인터를 통해 스택이 비어있는지, 가득찼는지, 다음 값이 들어갈 위치 밑 삭제되어야 할 위치를 알 수 있다.
스택을 처음 설계할 때, 기본 위치는 -1로 설정한다.
C++로 스택을 구현하기 위해 제작한 함수
1. s.push() : 스택의 가장 top 부분에 데이터를 넣기 위한 함수
구현하고자 하는 스택의 길이가 10이므로 스택에 10개의 데이터가 들어가면 더 이상 삽입이 불가능하도록 구현해야한다.
2. s.pop() : 스택의 가장 최신 데이터를 삭제하기 위한 함수
스택이 비어있는 경우 더이상 삭제를 하지 않고 스택이 비어있다는 알림을 출력하도록 한다.
3. s.print() : 스택 전체를 출력하는 함수
스택이 비어있는 경우 스택이 비어있다는 알림을 출력하도록 한다. 그렇지 않으면 스택에 들어있는 모든 데이터를 출력한다.
연습문제 : 길이가 10인 배열로 스택을 구현해보자
#include <iostream>
using namespace std;
class myStack {
private:
int arr[10] = { 0 }; //stack의 총 크기를 10으로 둠
int top = -1; // 위치를 기억하기 위한 스택 포인터(SP)
public:
void push();
void pop();
void print();
};
void myStack::push() {
if(top < 9){
int num;
cout << "숫자를 입력하세요 : ";
cin >> num;
top++;
arr[top] = num;
}
else {
cout << "stack is full" << endl;
}
}
void myStack::pop() {
if (top == -1) {
cout << "stack is empty" << endl;
}
else {
arr[top] = 0;
top--;
}
}
void myStack::print() {
if (top == -1) {
cout << "stack is empty" << endl;
}
else {
for (int i = 0; i <= top; i++) {
cout << i << " : " << arr[i] << endl;
}
}
}
int main() {
myStack ms;
int inp;
while (1) {
cout << "번호를 입력하시오 1. push / 2. pop / 3. print / 4. 종료 " << endl;
cin >> inp;
switch (inp) {
case 1:
ms.push();
break;
case 2:
ms.pop();
break;
case 3:
ms.print();
break;
case 4:
return 0;
default:
cout << "잘못된 입력입니다" << endl;
}
}
return 0;
}
++ 추가로 코드를 좀 더 줄이기 위해서는
데이터를 푸시할 때 arr[++top] = num; 으로 줄일 수 있다.
'알고리즘 > C&C++' 카테고리의 다른 글
[BOJ] 2606번 바이러스 - C++ (0) | 2022.03.13 |
---|---|
백준 1152 : 단어의 개수 (C++ 문자열 분리) (0) | 2021.10.06 |
C++로 Circular Queue (원형 큐) 구현하기 (0) | 2021.08.18 |
백준 1546번: 평균 (0) | 2021.08.12 |
백준 2588번: 곱셈 (0) | 2021.07.28 |