코테 관련/자료구조 & 알고리즘
[자료구조] 스택(Stack)과 큐(Queue)
jungha_k
2022. 9. 27. 00:04
이미지 출처 : https://www.scaler.com/topics/java/stack-and-queue-in-java/
Stack : 쌓다
데이터를 순서대로 쌓는 자료구조
LIFO(Last In First Out) : 후입선출 구조
ex) 프링글스, 브라우저 뒤/앞 으로 가기
예1) 1, 2, 3, 4를 스택에 차례대로 넣습니다.
Stack<Integer> stack = new Stack<>(); //Integer형 스택 선언
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
---------------------------
1 <- 2 <- 3 <- 4
---------------------------
들어간 순서대로, 1번이 제일 먼저 들어가고 4번이 마지막으로 들어가게 됩니다.
예2) 스택이 빌 때까지 데이터를 전부 빼냅니다.
stack.pop();
stack.pop();
stack.pop();
stack.pop();
---------------------------
---------------------------
4, 3, 2, 1
제일 마지막에 있는 데이터부터 차례대로 나오게 됩니다
데이터를 '하나씩' 넣고 뺄 수 있고,
단 하나의 입출력 방향을 갖고 있다.
Stack 메서드
Stack<Integer> stack = new Stack<>(); //int형 스택 선언
- push(): 스택에 데이터를 추가
- pop(): 가장 나중에 추가된 데이터를 스택에서 삭제, 삭제한 데이터를 리턴
- size(): 스택에 추가된 데이터의 크기를 리턴
- peek(): 가장 나중에 추가된 데이터를 리턴
- show(): 현재 스택에 포함되어 있는 모든 데이터를 String 타입으로 변환하여 리턴
- clear(): 현재 스택에 포함되어 있는 모든 데이터 삭제
- stack.empty(); // stack이 비어있는지 check (비어있다면 true)
- stack.contains(1) // stack에 1이 있는지 check (있다면 true)
Queue :
줄을 서서 기다리다, 대기행렬
FIFO (First In First Out) : 선입선출 구조
먼저 들어간 데이터가 제일 처음에 나오는 선입선출의 구조
예1) 1, 2, 3, 4를 큐에 차례대로 넣습니다.
Queue<Integer> queue = new LinkedList<>(); //int형 queue 선언
queue.add(1); // queue에 값 1 추가
queue.add(2); // queue에 값 2 추가
queue.add(3); // queue에 값 3 추가
queue.add(4); // queue에 값 4 추가
queue.add(데이터)
출력 방향 <---------------------------< 입력 방향
1 <- 2 <- 3 <- 4
<---------------------------<
들어간 순서대로, 1번이 제일 먼저 들어가고 4번이 마지막으로 들어가게 됩니다.
예2) 큐가 빌 때까지 데이터를 전부 빼냅니다.
queue.poll(); // queue에 첫번째 값을 반환하고 제거
queue.poll();
queue.poll();
queue.poll();
queue.poll()
출력 방향 <---------------------------< 입력 방향
<---------------------------<
1, 2, 3, 4
데이터는 하나씩 넣고 뺄 수 있음,
데이터 입력/출력 방향이 상이하다.
Queue에 데이터를 넣는 것을 'enqueue', 데이터를 꺼내는 것을 'dequeue'
*콘텐츠에서 배운 데이터를 넣고 빼는 메서드는 add/poll 이었다.
궁금해서 찾아보니 enqueue에도 offer, add 메서드가 있고
dequeue에 poll, remove 메서드가 있었다.
각 메서드들의 차이 참고 : https://cocoon1787.tistory.com/774
Queue 메서드
- add(): 큐에 데이터를 추가
- poll(): 가장 먼저 추가된 데이터를 큐에서 삭제, 삭제한 데이터를 리턴 (!= pop)
- size(): 큐에 추가된 데이터의 크기를 리턴
- peek(): 큐에 가장 먼저 추가된 데이터를 리턴
- show(): 큐에 들어있는 모든 데이터를 String 타입으로 변환하여 리턴
- clear(): 큐에 들어있는 모든 데이터를 삭제