Stack 란?
한쪽 끝에서만 원소를 넣거나 뺄 수 있는 자료구조
먼저 들어간 원소가 제일 나중에 나오는 FILO(First In Last Out) 자료구조
큐나 덱도 스택처럼 특정 위치에서만 원소를 넣거나 뺄 수 있는데 이들을 Restricted Structure라고 한다.
Stack의 성질
- 원소의 추가가 O(1)
- 원소의 제거가 O(1)
- 제일 상단의 원소 확인이 O(1)
- 제일 상단이 아닌 나머지 원소들의 확인/변경이 원칙적으로 불가능
- 단 배열을 이용해 스택을 구현하면 기본적인 스택의 기능 이외도 제일 상단이 아닌 나머지 원소들의 확인/변경이 가능
Stack 구현 및 기능
배열 혹은 연결 리스트를 이용하여 구현할 수 있다.
배열을 이용한 stack의 구현이 더 쉽다.
스택을 배열로 구현할 때는 원소를 담은 큰 배열 한개와 인덱스를 저장할 변수 한 개만 필요하다.
Stack은 push, pop, top 메서드로 구성되어 있다.
#include <bits/stdc++.h>
using namespace std;
const int MX = 1000005;
int dat[MX];
int pos = 0;
void push(int x){
}
void pop(){
}
int top(){
}
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();
}
내가 생각한 구현
package com.example.algo.stack;
public class StackImpl {
private static final int MX = 1000005;
private static int[] dat = new int[MX];
private static int pos = 0;
public void push(int x) {
dat[pos++] = x;
}
public void pop() {
if(pos > 0) pos--;
}
public int top() {
return dat[pos-1];
}
public void test() {
push(5); push(4); push(3);
System.out.println(top());
pop(); pop();
System.out.println(top());
push(10); push(12);
System.out.println(top());
pop();
System.out.println(top());
}
public static void main(String[] args) {
StackImpl stack = new StackImpl();
stack.test();
}
}
STL stack & JCF Stack
https://docs.oracle.com/javase/8/docs/api/java/util/Stack.html
https://cplusplus.com/reference/stack/stack/
https://github.com/encrypted-def/basic-algo-lecture/blob/master/0x05/stack_example.cpp
강의 정리
배열과 pos라는 인덱스를 활용해 스택을 구현하는 법을 알아봤다.
stack에는 push, pop, top 메서드를 활용해서 요소들을 다룬다.
empty 상황에 주의하자.
활용법
- 수식의 괄호 쌍
- 전위/중위/후위 표기
- DFS
- Flood Fill
'Computer Science > DataStructure' 카테고리의 다른 글
Deque (덱) (0) | 2023.05.23 |
---|---|
Queue (큐) (0) | 2023.05.09 |
컬렉션 클래스 정리 & 요약 (0) | 2022.11.23 |
Collections (0) | 2022.11.23 |
Properties (0) | 2022.11.22 |