티스토리 뷰
1. 정의와 성질
정의
한쪽 끝에서만 자료를 넣거나 뺄 수 있는 자료구조. 구조적으로 먼저 들어간 원소가 제일 나중에 나오는 구조(FILO)
🎯 참고로 스택, 큐, 덱은 특정 위치에서만 원소를 넣거나 뺄 수 있는 제한이 있으며 이들은 묶어 Restricted Structure이라고 함!
성질 - 원소의 추가/제거/상단 원소 확인 및 변경
1) 원소의 추가 시간복잡도는 O(1)
2) 원소의 제거 시간복잡도는 O(1)
3) 제일 상단의 원소 확인 시간복잡도는 O(1)
4) 제일 상단이 아닌 나머지 원소들의 확인 및 변경은 원칙적으로 불가능함!
물론 스택을 구현할 때 가장 상단이 아닌 나머지 원소들을 확인하거나 변경할 수도 있겠지만, 애초에 스택은 그런 의미로 만들어진 것이 아님! 실제 스택의 용례를 보아도 1), 2), 3)을 위해 쓰인 경우만 존재함. STL stack에서도 제시된 기능 외에 다른 기능은 제공되지 않음!
2. 기능과 구현
직접 구현 - push(), pop(), top()
#include <bits/stdc++.h>
using namespace std;
const int MX = 1000005;
int dat[MX];
int pos = 0; //음 원래 배웠던 거랑 다르게 위치가 -1이 아니고 0이다!
void push(int x){
dat[pos++] = x;
}
void pop(){
pos--;
}
int top(){
return dat[pos-1];
}
void test(){
push(5); push(4); push(3);
cout << top() << '\n'; // 3
pop(); pop();
cout << top() << '\n'; // 5
push(10); push(12);
cout << top() << '\n'; // 12
pop();
cout << top() << '\n'; // 10
}
int main(void) {
test();
}
3. STL 속 stack
STL 속 stack에서는 보통 push(), pop(), empty(), top(), size() 멤버 함수를 사용하게 됨.
#include <bits/stdc++.h>
using namespace std;
int main(void) {
stack<int> S; //stack 선언
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'; // 스택이 비어있는데 top을 호출하면 런타임 에러가 발생함
}
📌stack 개념 참고
https://coding-factory.tistory.com/597
https://cplusplus.com/reference/stack/stack/
'🥞 Algorithm > Algorithm-squirrels 스터디' 카테고리의 다른 글
[바킹독의 실전 알고리즘] 0x07강 - 덱 (1) | 2023.02.02 |
---|---|
[바킹독의 실전 알고리즘] 0x06강 - 큐 (0) | 2023.02.01 |
[바킹독의 실전 알고리즘] 0x04강 - 연결 리스트 (1) | 2023.01.30 |
[바킹독의 실전 알고리즘] 0x03강 - 배열 (1) | 2023.01.28 |
[바킹독의 실전 알고리즘] 0x02강 - 기초 코드 작성 요령 II (0) | 2023.01.27 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 세오스
- jwt
- JWT 토큰
- Subnet
- 로컬스토리지
- react
- 로그인 기능 구현
- 리액트
- route table
- 투포인터
- AWS
- 쿠키
- DOM
- vpc peering
- 면접을 위한 CS 전공지식 노트
- IGW
- 프론트엔드
- 정렬
- cloud
- TypeScript
- 바리바리
- ceos
- refresh token
- 이분탐색
- NaCl
- VPC
- access token
- 그리디
- AwsCloudClubs
- 리액트를 다루는 기술
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함