스택은 FILO(First in Last Out, 선입후출) 방식으로 작동하는 자료 구조체를 말한다.
자료의 저장과 삭제가 자료구조 한쪽 끝에서 이루어지는 것이 특징이다.
삽입 연산은 스택의 맨 끝(top)에 새로운 자료(요소)를 저장한다.
제거 연산은 스택의 맨 끝(top)에 있는 자료를 출력, 제거한다.
import java.util.Stack; //import
Stack<Integer> stack = new Stack<>(); //int형 스택 선언
Stack<String> stack = new Stack<>(); //char형 스택 선언
stack.push(1); // stack에 값 1 추가
stack.push(2); // stack에 값 2 추가
stack.push(3); // stack에 값 3 추가
stack.peek(); // stack의 가장 상단의 값 출력 (제거 X)
# 1
stack.pop(); // stack에 값 반환 후 제거
# 2 제거
stack.clear(); // stack의 전체 값 제거 (초기화)
# 3 제거 (전체 제거)
stack = list()
data = 1
# 삽입
stack.append(data)
# 출력
print(stack.pop())
# 혹은
print(stack[-1])
del stack[-1]
파이썬에서는 list 혹은 deque를 스택으로 사용한다.
list와 deque의 append/pop 성능은 유의미한 차이가 없으므로 스택의 경우에는 list를 사용해도 무방하다.
큐는 FIFO(First in First Out, 선입선출) 방식으로 작동하는 자료 구조체를 말한다.
큐의 가장 앞의 요소를 front(left), 마지막 요소를 rear(right)라고 한다면 큐의 삽입(Enqueue)는 후단에서, 큐의 제거(Dequeue)는 전단에서 수행된다
import java.util.LinkedList; //import
import java.util.Queue; //import
Queue<Integer> queue = new LinkedList<>(); //int형 queue 선언, linkedlist 이용
Queue<String> queue = new LinkedList<>(); //String형 queue 선언, linkedlist 이용
queue.add(1); // queue에 값 1 추가
queue.add(2); // queue에 값 2 추가
queue.offer(3); // queue에 값 3 추가
queue.peek(); // queue의 첫번째 값 참조 (제거, 삭제 X)
# 1
queue.poll(); // queue에 첫번째 값을 반환하고 제거 비어있다면 null
# 1 반환, 제거
queue.remove(); // queue에 첫번째 값 제거
# 2 반환, 제거, 자료가 없으면 NoSuchElementException 반환
queue.clear(); // queue 초기화
# 3 제거 (전부 제거)
from collections import deque
queue = deque()
queue.append(1)
queue.append(2)
data = queue.popleft()
# 1
data = queue.popleft()
# 2