꾸준히 기록하자

[Algorithms] 스택과 큐 본문

IT/Algorithms

[Algorithms] 스택과 큐

seungwonlee 2024. 8. 28. 17:26
728x90

스택의 특징

  • LIFO(Last In, First Out): 마지막에 들어온 데이터가 가장 먼저 나가는 구조입니다.
  • 깊이 우선 탐색(DFS), 백 트래킹에서 중요한 역할을 합니다.

연산

  • push(): 스택의 맨 위에 데이터를 추가합니다.
  • pop(): 스택의 맨 위에 있는 데이터를 제거하고 반환합니다.
  • peek(): 스택의 맨 위에 있는 데이터를 제거하지 않고 반환합니다.
package StackAndQueue;

import java.util.Stack;

public class stack {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();

        stack.push(1);
        stack.push(3);
        stack.push(2);
        stack.push(4);

        System.out.println("contains : " + stack.contains(2)); // 2라는 숫자 존재여부 판단 있으면 true
        System.out.println(stack);
        System.out.println("peek : " + stack.peek());          // 스택의 가장 상단의 값 출력하고 제거하지 않음
        System.out.println(stack);
        System.out.println("pop : " + stack.pop());            // 스택의 가장 상단의 값 출력하고 제거함

        System.out.println(stack);
        stack.clear();                         // 초기화
        System.out.println(stack);
        System.out.println(stack.isEmpty());   // 비어있는지 판단 비어있으면 true
    }
}

큐의 특징

  • FIFO(First In, First Out): 큐는 먼저 들어온 데이터가 먼저 나가는 구조입니다.
  • 한쪽 끝은 프런트(front)로 정하여 삭제 연산만 수행
  • 반대 끝은 리어(rear)로 정하여 삽입 연산만 수행
  • 그래프의 넓이 우선 탐색(BFS)에서 사용

연산:

  • offer(): 큐의 끝에 데이터를 추가합니다.
  • poll(): 큐의 앞에 있는 데이터를 제거하고 반환합니다.
  • peek(): 큐의 앞에 있는 데이터를 제거하지 않고 반환합니다.
package StackAndQueue;

import java.util.*;

public class queue {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();

        queue.offer(1);
        queue.offer(2);
        queue.offer(3);
        queue.offer(4);

        System.out.println(queue.poll());   // 1 > 제거
        System.out.println(queue.poll());   // 2 > 제거 
        System.out.println(queue.peek());   // 3 > 제거 안함
        System.out.println(queue);          // [3,4]
    }
}

차이점 요약

  • 스택은 데이터를 넣고 빼는 순서가 "후입선출" 방식으로 마지막에 넣은 데이터를 가장 먼저 꺼냅니다.
  • 는 데이터를 넣고 빼는 순서가 "선입선출" 방식으로 가장 먼저 넣은 데이터를 가장 먼저 꺼냅니다.

끝.

반응형

'IT > Algorithms' 카테고리의 다른 글

[Algorithms] 삽입 정렬  (0) 2024.10.07
[Algorithms] 선택 정렬  (0) 2024.09.30
[Algorithms] 버블 정렬  (0) 2024.08.31
[Algorithms] 배열과 리스트  (0) 2024.08.26
Comments