[자료구조] 스택(Stack) / 큐(Queue) / 데크(Deque)
출처 : https://nakjunizm.github.io
스택(Stack)
후입선출 (LIFO, Last In First Out)
리스트 내 데이터 삽입, 삭제가 한쪽 끝에서 이루어지는 데이터구조
import java.util.*;
public class StackTest {
public static void main(String[] args) {
Stack stk = new Stack();
stk.push("A");
stk.push("B");
stk.push("C");
while(!stk.empty()) {
System.out.println(stk.pop());
}
}
}
메소드 | 설명 |
---|---|
boolean empty() | 해당 스택이 비어 있으면 true를, 비어 있지 않으면 false를 반환 |
E peek() | 해당 스택의 제일 상단에 있는(제일 마지막으로 저장된) 요소를 반환 |
E pop() | 해당 스택의 제일 상단에 있는(제일 마지막으로 저장된) 요소를 반환하고, 해당 요소를 스택에서 제거 |
E push(E item) | 해당 스택의 제일 상단에 전달된 요소를 삽입 |
int search(Object o) | 해당 스택에서 전달된 객체가 존재하는 위치의 인덱스를 반환 이때 인덱스는 제일 상단에 있는(제일 마지막으로 저장된) 요소의 위치부터 0이 아닌 1부터 시작 |
큐(Queue)
선입 선출 (FIFO, First In First Out)
추상적 자료형, 시작과 끝에 두개의 포인터를 갖는 자료구조
import java.util.*;
public class QueueTest {
public static void main(String[] args) {
Queue que = new LinkedList();
que.add("A");
que.add("B");
que.add("C");
while(!que.isEmpty()) {
System.out.println(que.poll());
}
}
}
메소드 | 설명 |
---|---|
boolean add(E e) | 해당 큐의 맨 뒤에 전달된 요소를 삽입 만약 삽입에 성공하면 true를 반환하고, 큐에 여유 공간이 없어 삽입에 실패하면 IllegalStateException을 발생 |
E element() | 해당 큐의 맨 앞에 있는(제일 먼저 저장된) 요소를 반환 |
boolean offer(E e) | 해당 큐의 맨 뒤에 전달된 요소를 삽입 |
E peek() | 해당 큐의 맨 앞에 있는(제일 먼저 저장된) 요소를 반환 만약 큐가 비어있으면 null을 반환 |
E poll() | 해당 큐의 맨 앞에 있는(제일 먼저 저장된) 요소를 반환하고 해당 요소를 큐에서 제거 만약 큐가 비어있으면 null을 반환 |
E remove() | 해당 큐의 맨 앞에 있는(제일 먼저 저장된) 요소를 제거 |
데크(Deque)
스택과 큐과 결합한 자료구조
양쪽 끝에서 삽입, 삭제 가능
- 입력제한데크(Scroll) : 한쪽의 입력을 제한
- 출력제한데크(Shelf) : 한쪽의 출력을 제한
import java.util.*;
class DequeTest {
public static void main(String[] args) {
Deque<Integer> deque = new ArrayDeque<>(8);
deque.push(5); // [5]
deque.push(4); // [5,4]
System.out.println(deque.pop()); // 4 출력
System.out.println(deque); // [5] => Stack(LIFO)
deque.offerFirst(3); // [3,5] => Deque
deque.offerLast(6); // [3,5,6] => Queue
System.out.println(deque.pollFirst()); // 3 출력
System.out.println(deque); // [5,6] => Queue(FIFO)
}
}
Queue Method | Equivalent Deque Method | 설명 |
---|---|---|
add(e) | addLast(e) | 용량 제한을 위반하지 않고 즉시 수행 할 수있는 경우이 deque 끝에 지정된 요소를 삽입. 용량 제한 deque를 사용할 때는 offerLast (E) 메소드를 사용하는 것이 일반적으로 바람직. 이 메소드는 add (E)와 같습니다. |
offer(e) | offerLast(e) | 용량 제한을 위반하지 않는 한 지정된 요소를이 deque 앞에 삽입. 용량 제한 deque를 사용하는 경우, 일반적으로 addFirst (E) 메소드보다 선호. |
remove() | removeFirst() | 첫 번째 요소를 검색하고 제거. deque가 비어있는 경우 예외를 발생 시킨다는 점에서만 pollFirst와 다름. |
poll() | pollFirst() | 첫 번째 요소를 검색하여 제거하거나, deque가 비어 있으면 null을 반환. |
element() | getFirst() | 첫 번째 요소를 검색하지만 제거하지는 않음. deque가 비어있는 경우 예외를 발생 시킨다는 점에서만 peekFirst와 다름. |
peek() | peekFirst() | 첫 번째 요소를 검색하지만 제거하지는 않음. deque가 비어 있으면 null을 반환. |
Stack Method | Equivalent Deque Method | 설명 |
---|---|---|
push(e) | addFirst(e) | 용량 제한을 위반하지 않고 즉시 수행 할 수있는 경우 지정된 요소를 deque 앞에 삽입. 용량 제한 deque를 사용할 때는 offerFirst (E) 방법을 사용하는 것이 일반적으로 바람직. |
pop() | removeFirst() | deque의 첫 번째 요소를 검색하고 제거. 비어있는 경우 예외를 발생 시킨다는 점에서만 pollFirst와 다름. |
peek() | peekFirst() | deque의 첫 번째 요소를 검색하지만 제거하지는 않음. deque가 비어 있으면 null을 반환. |