[Day 7 | Java] Stack과 Queue

y♡ding·2024년 10월 22일
0

데브코스 TIL

목록 보기
40/163

Stack과 Queue 비교

자료구조동작 원리삽입 위치삭제 위치주요 메서드
StackLIFO (후입선출)맨 위맨 위push(), pop(), peek()
QueueFIFO (선입선출)맨 뒤맨 앞offer(), poll(), peek()
  • Stack: 마지막에 삽입된 요소가 먼저 삭제되는 후입선출(LIFO) 구조입니다.
  • Queue: 가장 먼저 삽입된 요소가 먼저 삭제되는 선입선출(FIFO) 구조입니다.ㅍ

Stack과 Queue의 사용 사례

* Stack 사용 사례:

  • 함수 호출 스택: 함수가 호출될 때마다 스택에 쌓이고, 함수가 끝날 때마다 스택에서 제거됩니다.
  • 브라우저 뒤로가기: 사용자가 방문한 페이지가 스택에 쌓이고, 뒤로 가기를 누르면 마지막 페이지가 먼저 나갑니다.

* Queue 사용 사례:

  • 프린터 작업 대기열: 먼저 요청한 작업이 먼저 출력됩니다.
  • 프로세스 관리: 운영체제에서 프로세스를 처리할 때 먼저 대기열에 들어온 프로세스를 먼저 처리하는 방식입니다.

Stack

  • push(): 스택의 맨 위에 요소를 추가합니다.
  • add(): 리스트처럼 작동하여 요소를 맨 끝에 추가합니다.
  • get(): 특정 인덱스에 있는 요소를 가져옵니다.
  • pop(): 스택의 맨 위에 있는 요소를 제거하고 반환합니다.

수업코드


package com.util1;

import java.util.Stack;

public class StackEx01 {
  public static void main(String[] args) {

      // Stack 객체 생성 (String 타입)
      Stack<String> stack = new Stack<>();

      // 1. 요소 추가 (push 메서드 사용)
      // 스택의 맨 위에 요소를 추가
      stack.push("홍길동");
      stack.push("박문수");
      stack.push("임꺽정");  // (임꺽정으로 수정)

      // 2. 스택의 현재 상태 출력
      System.out.println(stack);  // 출력: [홍길동, 박문수, 임꺽정]

      // 3. add() 메서드로 요소 추가
      // add() 메서드는 스택에서 제공되지만 일반 리스트의 추가처럼 사용됨
      stack.add("이몽룡");  // 스택의 맨 마지막(리스트의 끝)에 추가
      System.out.println(stack);  // 출력: [홍길동, 박문수, 임꺽정, 이몽룡]

      // 4. 특정 인덱스의 요소 가져오기 (get 메서드 사용)
      // 스택의 3번째 인덱스(즉, 네 번째 요소)를 가져옴
      String data = stack.get(3);
      System.out.println(data);  // 출력: 이몽룡
      System.out.println(stack);  // 출력: [홍길동, 박문수, 임꺽정, 이몽룡]

      // 5. 스택에서 맨 위 요소 제거 (pop 메서드 사용)
      // 스택의 맨 위 요소를 제거하고 반환
      String popData = stack.pop();
      System.out.println(popData);  // 출력: 이몽룡
      System.out.println(stack);  // 출력: [홍길동, 박문수, 임꺽정]
  }
}



Queue

  • offer(): 큐의 맨 뒤에 요소를 추가합니다.

  • peek(): 큐의 맨 앞에 있는 요소를 제거하지 않고 가져옵니다.

  • poll(): 큐의 맨 앞에 있는 요소를 제거하고 반환합니다.


package com.util1;

import java.util.LinkedList;
import java.util.Queue;

public class QueueEx01 {
    public static void main(String[] args) {

        // Queue 객체 생성 (LinkedList 사용)
        Queue<String> queue = new LinkedList<>();

        // 1. 요소 추가 (offer 메서드 사용)
        // 큐의 맨 뒤에 요소를 추가
        queue.offer("홍길동");
        queue.offer("박문수");
        queue.offer("임꺽정");

        // 2. 큐의 현재 상태 출력
        System.out.println(queue);  // 출력: [홍길동, 박문수, 임꺽정]

        // 3. 특정 요소 추가 (offer 메서드 사용)
        // 큐의 맨 뒤에 새로운 요소를 추가
        queue.offer("이몽룡");
        System.out.println(queue);  // 출력: [홍길동, 박문수, 임꺽정, 이몽룡]

        // 4. 큐의 맨 앞 요소 가져오기 (peek 메서드 사용)
        // 큐의 맨 앞에 있는 요소를 제거하지 않고 가져옴
        String data = queue.peek();
        System.out.println(data);  // 출력: 홍길동
        System.out.println(queue);  // 큐는 변하지 않음: [홍길동, 박문수, 임꺽정, 이몽룡]

        // 5. 큐에서 맨 앞 요소 제거 (poll 메서드 사용)
        // 큐의 맨 앞 요소를 제거하고 반환
        String polledData = queue.poll();
        System.out.println(polledData);  // 출력: 홍길동
        System.out.println(queue);  // 출력: [박문수, 임꺽정, 이몽룡]
    }
}

0개의 댓글

관련 채용 정보