해당 게시글은 [Java] 어서와! 자료구조 알고리즘은 처음이지?https://programmers.co.kr/learn/courses/13577를 간략히 요약한 게시글이며 모든 출처는 해당강의에 있습니다.
앞에서 부터 뒤로 데이터를 삽입하는것은 동일하지만, 데이터를 꺼낼때 앞에서 부터 꺼내느냐 뒤에서 부터 꺼내느냐에 따라 Queue
와 Stack
이 달라집니다.
Queue
: 데이터를 앞에서 부터 꺼냄Stack
: 데이터를 뒤에서 부터 꺼냄가장 먼저 들어간 데이터가 가장 앞으로 가고 가장 나중에 들어온 데이터가 가장 뒤로 가지만, 뒤에서 부터 데이터를 꺼낸다면 가장 최근인 순으로 데이터들이 나오게 됩니다.
가장 먼저 들어간 데이터가 가장 앞으로 가고 가장 나중에 들어온 데이터가 가장 뒤로 가는것과 같이, 앞에서 부터 데이터를 꺼낸다면 가장 오래된 순으로 데이터들이 나오게 됩니다.
List<Integer> list = new LinkedList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
System.out.println(list);
//큐
System.out.println(list.remove(0);
System.out.println(list);
System.out.println(list.remove(0);
System.out.println(list);
System.out.println(list.remove(0);
System.out.println(list);
큐 부분과 스택 부분을 번갈아 주석처리 해보면 됩니다.
Queue
는 가장 앞부분의 데이터를 꺼내야 하므로 0번째 인덱스
데이터를 제거하면서 출력하였습니다.
List<Integer> list = new LinkedList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
System.out.println(list);
//스택
System.out.println(list.remove(list.size()-1));
System.out.println(list);
System.out.println(list.remove(list.size()-1));
System.out.println(list);
System.out.println(list.remove(list.size()-1));
System.out.println(list);
Stack
는 가장 뒷부분의 데이터를 꺼내야 하므로 마지막 인덱스
데이터를 제거하면서 출력하였습니다.
큐는 마지막에 데이터를 삽입하고 맨 앞의 데이터부터 삭제 합니다.
Queue<Integer> queue = new LinkedList<>();
queue.offer(1);
queue.offer(2);
queue.offer(3);
queue.offer(4);
queue.offer(5);
System.out.println(queue);
queue.poll();
System.out.println(queue);
queue.poll();
System.out.println(queue);
queue.poll();
System.out.println(queue);
System.out.println(queue.peek());
System.out.println(queue);
add(e)
: 마지막에 데이터 추가, 안될시 에러remove()
: 첫번째 데이터 출력 후 삭제, 안될시 에러element()
: 첫번째 데이터 단순 출력, 안될 시 에러offer(e)
: 마지막에 데이터 추가, 안될시 0값poll()
: 첫번째 데이터 출력 후 삭제, 안될시 0값peek()
: 첫번째 데이터 단순 출력, 안될시 0값스택은 마지막에 데이터를 삽입하고 마지막의 데이터부터 삭제 합니다.
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
System.out.println(stack);
stack.pop();
System.out.println(stack);
stack.pop();
System.out.println(stack);
System.out.println(stack.peek());
System.out.println(stack);
stack.pop();
System.out.println(stack);
push(e)
: 마지막에 데이터 추가pop()
: 마지막 데이터 출력 후 삭제peek()
: 마지막 데이터 단순 출력디큐는 처음과 마지막에 선택하여 데이터를 삽입하고, 처음과 마지막에 선택하여 데이터를 삭제합니다.
Deque<Integer> deque = new LinkedList<>();
deque.offerFirst(1);
System.out.println(deque);
deque.offerLast(2);
System.out.println(deque);
deque.offerFirst(3);
System.out.println(deque);
deque.offerLast(4);
System.out.println(deque);
deque.pollFirst();
System.out.println(deque);
deque.pollFirst();
System.out.println(deque);
offerFirst(e)
: 맨 앞에 데이터 추가pollFirst()
: 맨 앞의 데이터 출력 후 삭제peekFrist()
: 맨 앞의 데이터 단순 출력offerLast(e)
: 맨 뒤에 데이터 추가pollLast()
: 맨 뒤에 데이터 출력 후 삭제peekLast()
: 맨 뒤에 데이터 단순 출력package StackQueue스택큐;
import java.util.*;
// Queue : offer(e), poll(), peek() : 들어간 순서대로
// Stack : push(e), pop(), peek() : 들어간 반대로
// DeQueue : offerFirst(e), pollFirst(), peekFirst(), offerLast(e), pollLast(), peekLast()
public class StackQueue실습 {
public static void main(String[] args) {
List<Integer> list = new LinkedList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
System.out.println(list);
//큐
// System.out.println(list.remove(0);
// System.out.println(list);
//
// System.out.println(list.remove(0);
// System.out.println(list);
//
// System.out.println(list.remove(0);
// System.out.println(list);
//스택
System.out.println(list.remove(list.size()-1));
System.out.println(list);
System.out.println(list.remove(list.size()-1));
System.out.println(list);
System.out.println(list.remove(list.size()-1));
System.out.println(list);
//큐
//add(e), remove(), element() == 못할시 에러
//offer(e) poll() peek() == 못할시 0값
Queue<Integer> queue = new LinkedList<>();
queue.offer(1);
queue.offer(2);
queue.offer(3);
queue.offer(4);
queue.offer(5);
System.out.println(queue);
queue.poll();
System.out.println(queue);
queue.poll();
System.out.println(queue);
queue.poll();
System.out.println(queue);
System.out.println(queue.peek());
System.out.println(queue);
//스택
//push(e), pop(), peek()
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
System.out.println(stack);
stack.pop();
System.out.println(stack);
stack.pop();
System.out.println(stack);
System.out.println(stack.peek());
System.out.println(stack);
stack.pop();
System.out.println(stack);
//디큐
//offerFIrst(e), pollFirst(), peekFirst(), offerLast(e), pollLast(), peekLast()
Deque<Integer> deque = new LinkedList<>();
deque.offerFirst(1);
System.out.println(deque);
deque.offerLast(2);
System.out.println(deque);
deque.offerFirst(3);
System.out.println(deque);
deque.offerLast(4);
System.out.println(deque);
deque.pollFirst();
System.out.println(deque);
deque.pollFirst();
System.out.println(deque);
}
}