스택(Stack)과 큐(Queue)

호수·2022년 1월 29일
0

Baekjoon

목록 보기
8/61
post-thumbnail

1. 스택이란?

  • '쌓다'라는 의미.
  • 프로그래밍에서 목록 혹은 list에서 접근이 한 쪽에서만 가능한 구조.
  • LIFO(Last-in, First-Out)가 기본 원리.
  • 대표 내장함수 : PUSH, PEEK, POP

2. 스택의 구조?

  • BOOK = [BOOK1, BOOK2, BOOK3] 에 BOOK4를 추가하려고 한다.
    'PUSH'에 의해 BOOK 리스트에 BOOK4를 추가됨.
    'PEEK'에 의해 가장 위에있는 함수가 무엇인지 확인 가능. (PEEK : 옅보다) : 확인만 하지 데이터에 손대지 않음.
    'POP' PEEK 함수에서 제일 마지막에 넣은 데이터를 추출하는 함수.

자바에서 Stack 사용하기

자바에서 스택은 Stack 클래스를 구현하여 제공하고 있다.

Stack st = new Stack();

메서드

push(E item) 스텍의 맨 위에 지정된 요소를 추가합니다.
pop() 스텍의 맨 위에서 요소를 제거하고 반환합니다. 스텍이 비어 있으면 예외가 발생합니다.
peek() 스텍의 맨 위에서 요소를 반환합니다. 스텍이 비어 있으면 예외가 발생합니다.

1. 큐란?

  • '일이 처리되기를 기다리는 리스트'라는 의미.
  • 프로그래밍에서 목록 혹은 리스트에서 접근이 양쪽에서 가능한 구조.
  • FIFO(First-in, First-out)가 기본 원리.(선착순 방식 고집)
  • 대표 내장함수 : PUT, PEEK, GET


큐는 대기 줄에 비유할 수 있습니다. 흔히 놀이공원에 입장하기 위해 줄을 설 때, 먼저 온 사람이 먼저 들어가게 된다. 이러한 구조를 선입선출 구조라고 한다.

자바에서 Queue 사용하기

자바에서 큐는 인터페이스로만 정의해놓았을 뿐 별도의 클래스를 제공하고 있지 않다. 따라서 Queue 클래스 인스턴스를 생성하기 위해 Queue의 인터페이스 구현체인 LinkedList() 생성자를 호출해준다.

Queue q = new LinkedList();

메서드

offer(E e)큐의 맨 뒤에 지정된 요소를 추가합니다. 큐가 가득 차서 요소를 추가 할수 없는 경우 false를 반환합니다.
add() 큐의 맨 뒤에 지정된 요소를 추가합니다. 큐가 가득 차서 요소를 추가 할수 없는 경우 IllegalStateException 예외를 발생시킵니다.
poll() 큐의 맨 앞에서 요소를 제거하고 반환합니다. 큐가 비어 있으면 null을 반환합니다.
peek() 큐의 맨 앞에서 요소를 반환합니다. 큐가 비어 있으면 null을 반환합니다.
clear() 큐의 모든 요소를 제거합니다.

import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
 
public class StackAndQueue {
    public static void main(String[] args) {
        Stack<String> stack = new Stack<String>();
        stack.push("0");
        stack.push("1");
        stack.push("2");
 
        Queue<String> queue = new LinkedList<String>();
        queue.offer("0");
        queue.offer("1");
        queue.offer("2");
        
        /*queue.add("3");
        queue.add("4");
        queue.add("5");*/
 
        System.out.println("=== Stack ===");
        while (!stack.empty()) {
            System.out.println(stack.pop());
        }
 
        System.out.println("=== Queue ===");
        while (!queue.isEmpty()) {
            System.out.println(queue.poll());
        }       
    }
}
profile
Back-End개발자 입문 과정 블로그🚀

0개의 댓글