강의/[C++]바킹독의 실전 알고리즘
[바킹독]5. 스택
개발의 피
2024. 8. 2. 00:25
https://youtu.be/0DsyCXIN7Wg?si=bYuwMhwGlEmQFd4b
[실전 알고리즘] 0x05강 - 스택
안녕하세요, 오늘은 스택을 조져보려고 합니다. 이번 시간부터 세 단원 동안 스택, 큐, 덱을 다룰건데 셋 다 비슷비슷해서 하나만 익히고 나면 전반적으로 어렵지않고, 내용 자체도 연결리스트
blog.encrypted.gg
1. 정의와 성질
2. 기능과 구현
3. STL stack
4. 연습 문제
1. 정의
스택 : 한쪽 끝에서만 원소를 넣거나 뺄 수 있는 자료구조
FILO(First In Last Out) : 구조적으로 먼저 들어간 원소가 제일 나중에 나옴
cf. Restricted Structure : 특정 위치에서만 원소를 넣거나 뺄 수 있는 제한이 걸려있음 -> 스택, 큐, 덱
2. 성질
1) 원소의 추가 : O(1)
2) 원소의 제거 : O(1)
3) 제일 상단의 원소 확인 : O(1)
4) 제일 상단이 아닌 나머지 원소들의 확인/변경이 원칙적으로 불가능
3. 구현
const int MX = 1000005;
int dat[MX];
int pos = 0;
1) push 함수
void push(int x){
dat[pos++] = x;
}
2) pop 함수
void pop(){
pos--;
}
3) top 함수
int top(){
return dat[pos-1];
}
4. STL stack
#include <bits/stdc++.h>
using namespace std;
int main(void) {
stack<int> S;
S.push(10); // 10
S.push(20); // 10 20
S.push(30); // 10 20 30
cout << S.size() << '\n'; // 3
if(S.empty()) cout << "S is empty\n";
else cout << "S is not empty\n"; // S is not empty
S.pop(); // 10 20
cout << S.top() << '\n'; // 20
S.pop(); // 10
cout << S.top() << '\n'; // 10
S.pop(); // empty
if(S.empty()) cout << "S is empty\n"; // S is empty
cout << S.top() << '\n'; // runtime error 발생
}
5. 연습 문제
BOJ 스택 (10828)
1) STL로 풀이
2) 배열로 직접 구현
pos=0 : 스택이 비었음을 의미
-> pop, empty, top에 활용