본문 바로가기
프로그래밍/Java

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

by 시간많은백수 2023. 8. 24.
반응형

✔️스택과 큐 란?

스택과 큐는 각각 후입선출(LIFO, Last In First Out)과 선입선출(FIFO, First In First Out) 원칙을 따르며, 이 두 자료구조를 이해하면 프로그래밍에서 데이터 처리 및 알고리즘 구현에 유용하게 활용할 수 있다.

 

💡 스택(Stack)

  • 스택은 한 쪽 끝에서만 데이터의 추가와 삭제가 일어나는 자료구조입니다.
  • 가장 위에 있는 항목이 가장 먼저 제거되는 후입선출(LIFO) 원칙을 따릅니다.
  • 주로 함수 호출과 같은 임시 데이터 저장, 역추적 등에 사용됩니다.
  • 자바에서는 java.util.Stack 클래스를 사용하여 스택을 구현할 수 있습니다.

 

스택(Stack) 예시

 

💡 스택(Stack)의 주요 함수

  • push(item): 스택의 맨 위에 요소를 추가합니다.
  • pop(): 스택의 맨 위에서 요소를 제거하고 반환합니다.
  • peek(): 스택의 맨 위에 있는 요소를 반환하지만 제거하지 않습니다.
  • isEmpty(): 스택이 비어있는지 여부를 확인합니다.
  • size(): 스택에 있는 요소의 개수를 반환합니다.

 

💡 스택(Stack)의 활용

  • 괄호 검사: 괄호 쌍의 유효성을 검사할 때 스택을 사용하여 열린 괄호를 저장하고 닫힌 괄호가 나올 때 매칭을 확인합니다.
  • 웹 브라우저 뒤로 가기: 사용자가 웹 페이지를 방문할 때마다 스택에 페이지를 추가하고 뒤로 가기 버튼을 누를 때 스택에서 페이지를 빼내어 이전 페이지로 이동합니다.
  • 수식 계산: 후위 표기법을 이용하여 수식을 계산할 때 스택을 활용하여 연산자와 피연산자를 관리합니다.

 

예)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.util.Stack;
 
public class StackExample {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        
        stack.push(10); // push item
        stack.push(20);
        stack.push(30);
        
        System.out.println("Top element: " + stack.peek()); // Top element: 30
        
        stack.pop(); // pop item
        
        System.out.println("Size of stack: " + stack.size()); // Size of stack: 2
        System.out.println("Is stack empty? " + stack.isEmpty()); // Is stack empty? false
    }
}
 
 
cs

 

💡 큐(Queue)

  • 큐는 똑같은 끝에서 데이터의 추가와 다른 끝에서의 삭제가 일어나는 자료구조입니다.
  • 가장 앞에 있는 항목이 가장 먼저 제거되는 선입선출(FIFO) 원칙을 따릅니다.
  • 작업 대기열, 프린터 출력 관리, 너비 우선 탐색(BFS) 등에 사용됩니다.
  • 자바에서는 java.util.Queue 인터페이스를 사용하여 큐를 구현할 수 있습니다. LinkedList를 활용하여 구현할 수도 있습니다.

 

큐(Queue) 예시

 

💡 큐(Queue)의 주요 함수

  • add(item): 큐의 뒤에 요소를 추가합니다.
  • remove(): 큐의 앞에서 요소를 제거하고 반환합니다.
  • element(): 큐의 앞에 있는 요소를 반환하지만 제거하지 않습니다.
  • isEmpty(): 큐가 비어있는지 여부를 확인합니다.
  • size(): 큐에 있는 요소의 개수를 반환합니다.

 

💡 큐(Queue) 활용

  • 작업 큐: 다양한 작업을 처리할 때, 먼저 들어온 작업을 먼저 처리하는 FIFO(First-In-First-Out) 구조를 활용합니다. 예를 들어 프린터 큐에서 출력 작업을 관리할 때 사용할 수 있습니다.
  • 너비 우선 탐색(BFS): 그래프나 트리의 노드를 너비 우선으로 탐색할 때 큐를 사용하여 탐색 순서를 관리합니다.
  • 캐시 관리: 최근에 사용된 데이터를 먼저 삭제하고 새로운 데이터를 추가하는 캐시 관리에 큐를 사용할 수 있습니다.

 

예)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.LinkedList;
import java.util.Queue;
 
public class QueueExample {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();
        
        queue.add(10); // add item
        queue.add(20);
        queue.add(30);
        
        System.out.println("Front element: " + queue.element()); // Front element: 10
        
        queue.remove(); // remove item
        
        System.out.println("Size of queue: " + queue.size()); // Size of queue: 2
        System.out.println("Is queue empty? " + queue.isEmpty()); // Is queue empty? false
    }
}
 
 
cs

 

반응형

'프로그래밍 > Java' 카테고리의 다른 글

[Java]MyBatis와 JPA  (0) 2023.09.26
[Java] JSP와 Servlet  (0) 2023.09.24
[Java] Math함수  (0) 2023.08.17
[Java] 변환  (0) 2023.08.16
[Java] 배열  (0) 2023.08.15