- Published on
알고리즘 - 스택 (Stack)
- Authors
- Name
- Kevin Junho Kim
정의
스택(Stack)은 자료구조 중 하나다.
데이터를 저장하는 데 쓰이며, "나중에 넣은 데이터가 먼저 나오는" 방식으로 동작한다.
이를 LIFO(Last-In-First-Out)라고 부른다.
즉, 가장 최근에 추가된 항목이 가장 먼저 제거된다.
스택의 함수
push(item): 스택에 새로운 항목을 추가. 이 함수는 스택의 맨 위에 데이터를 삽입한다.
pop(): 스택에서 가장 최근에 추가된 항목을 제거하. 스택이 비어있을 경우에는 제거할 항목이 없으므로 undefined를 반환하거나 에러를 발생.
peek(): 스택의 맨 위에 있는 항목을 반환. 스택에서 제거하지 않고 단순히 값을 확인하기 위한 용도로 사용. 스택이 비어있을 경우에는 undefined를 반환하거나 에러를 발생.
isEmpty(): 스택이 비어있는지 여부를 확인. 비어있으면 true를 반환하고, 아니면 false를 반환.
size(): 스택에 포함된 항목의 개수를 반환.
print(): 스택에 포함된 모든 항목을 순서대로 출력.
자바스크립트에서의 스택
function createStack() {
const stack = []
function push(item) {
stack.push(item)
}
function pop() {
if (!isEmpty()) {
return stack.pop()
} else {
console.log('Stack is empty.')
}
}
function peek() {
return !isEmpty() ? stack[stack.length - 1] : undefined
}
function isEmpty() {
return stack.length === 0
}
function size() {
return stack.length
}
function print() {
console.log(stack)
}
return {
push,
pop,
peek,
isEmpty,
size,
print,
}
}
// Usage
const stack = createStack()
stack.push(1)
stack.push(2)
stack.push(3)
console.log(stack.peek()) // Output: 3
console.log(stack.size()) // Output: 3
stack.pop()
stack.print() // Output: [1, 2]
파이썬에서의 스택
class Stack:
def __init__(self):
self.items = []
def push(self, item):
self.items.append(item)
def pop(self):
if not self.is_empty():
return self.items.pop()
else:
print("Stack is empty.")
def peek(self):
return self.items[-1] if not self.is_empty() else None
def is_empty(self):
return len(self.items) == 0
def size(self):
return len(self.items)
def print(self):
print(self.items)
def __str__(self):
return str(self.items)
# Usage
stack = Stack()
stack.push(1)
print(stack) # Output: Stack([1])
사용처
생각을 해봤는데 뒤로가기, 앞으로가기 이런데 써야하는데 리액트는 router-dom이 이미 해당 기능들을 다 갖추고 있다.
이 외에 웹사이트 글자편집기에는 필요없지만,
드래그 드랍으로 뭔가를 옮겼을때, undo 혹은 recover 기능을 추가하고싶다면,
스택이 아주 유용할거 같다.
즉, 우리 키보드에서 crtl + z 기능이나 다시 복원 crtl + y 정도 만들떄 사용하면 좋다.