본문으로 바로가기

[Java] 스택(Stack), 큐(Queue)

category 언어/Java 2022. 1. 3. 11:44
728x90

 

스택(Stack)

 

Stack의 사전적 정의는 '쌓다', '더미'라는 뜻으로, 택배 상하차를 할 때를 떠올리면 된다.

상자를 올릴 때는 위로 쌓아올리고, 물건을 내릴 때는 가장 위의 상자부터 내리는 구조와 같다.

 

즉 Stack은 LIFO(Last In First Out)의 구조로, 마지막에 들어간 값이 가장 먼저 출력되는 구조를 띄고 있다.

 

Stack의 사용

 

- 값을 입력할 때는 push() 사용

- 값을 출력할 때는 pop() 사용

- 값을 출력하지 않고 가장 마지막의 값을 확인하고 싶을 때는 peek() 함수 이용

 

출력 결과

-> 가장 마지막에 입력된 값이 가장 먼저 출력되는 역순의 구조를 띄고 있다.

 

 

큐(Queue)

 

Queue의 사전적 의미는 줄을 서서 기다리는 것을 의미하는데 매장에서 물건을 구입하기 위해 줄을 길게 기다리는 상황을 떠올리면 된다. 

 

즉 Queue는 FIFO(First In First Out)의 구조로, 먼저 들어간 값이 가장 먼저 출력되는 구조이다.

큐를 사용할 때는 클래스가 아닌 인터페이스만 제공하므로 이 Queue 인터페이스를 구현한 클래스를 사용해야 한다.

 

1. LinkedList

- 값을 입력할 때는 add(), offer()을 사용

- 값을 출력할 때는 poll(), remove()를 이용

- 값을 출력하지 않고 가장 마지막의 값을 확인하고 싶을 때는 peek() 함수 이용

 

출력 결과

-> 가장 먼저 입력한 값이 가장 먼저 출력되는 순차적인 구조를 띄고 있다.

 

 

2. PriorityQueue

- 우선순위 큐는 저장된 순서에 관계없이 우선순위가 높은 것부터 꺼내는 특징이 있다. (오름차순)

 

출력 결과

-> 숫자가 작을수록 우선순위는 높아지기 때문에 가장 우선순위가 높은 1이 먼저 출력되었다.

 

만약 내림차순으로 출력하고 싶다면 아래의 식을 이용하면 된다.

Queue<Integer> queue=new PriorityQueue<>(Collections.reverseOrder());

 

 

728x90