1. 스택(Stack)이란? 

  • 마지막에 저장한 데이터를 가장 먼저 꺼내는 자료구조로 입니다. 
  • LIFO(Last In First Out)
  • 예 - 웹브라우저의 앞페이지 이동 뒤페이지 이동 / 그릇 쌓기

import java.util.Stack;

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

        Stack<Integer> stack = new Stack<>();
        stack.push(1);
        stack.push(3);
        stack.push(7);
        stack.push(5);
        System.out.println(stack);  // [1, 3, 7, 5]

        System.out.println(stack.peek()); // 5 peek은 맨위에 뭐가 있는지 확인만 함
        System.out.println(stack.pop()); // 5 pop은 꺼내옴

        System.out.println(stack.contains(1));
        System.out.println(stack.empty()); // false //스택이 비어있으면 true, 데이터가 있으면 false
        stack.clear();
        System.out.println(stack.empty()); // true
    }
}
  • push X: 정수 X를 스택에 넣는 연산이다.
  • pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 스택에 들어있는 정수의 개수를 출력한다.
  • empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
  • top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.

 

2. 큐(Queue)

  • 큐는 처음에 저장한 데이터를 가장 먼저 꺼내는 자료구조입니다
  •  FIFO(First In First Out) 
  • 예 - 은행 창구 줄서기 / 인쇄작업 대기목록

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

public class Main {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();
        queue.add(1);
        queue.add(5);
        queue.add(3);
        System.out.println(queue); // [1, 5, 3]

        System.out.println(queue.poll()); // 1 // 맨앞의 데이터를 꺼낸다
        System.out.println(queue.peek()); // 5 // 맨앞의 데이터가 뭔지 확인만 함.

    }
}

 

3. ArrayDeque

  • 실무에서는 단순히 Stack, Queue 클래스 대신에 ArrayDeque 많이 사용합니다!
  • 기본 Stack, Queue의 기능을 모두 포함하면서도 성능이 더 좋기 때문이죠.
import java.util.ArrayDeque;

public class Main {
    public static void main(String[] args) {
        ArrayDeque<Integer> arrayDeque = new ArrayDeque<>();
        arrayDeque.addFirst(1);
        arrayDeque.addFirst(2);
        arrayDeque.addFirst(3);
        arrayDeque.addFirst(4);
        System.out.println(arrayDeque); // [4, 3, 2, 1]

        arrayDeque.addLast(0);
        System.out.println(arrayDeque); // [4, 3, 2, 1, 0]

        arrayDeque.offerFirst(10);  //addFirst와 비슷하지만 큐의 크기 문제가 생길 때, offerFirst는 false를 addFrist는 exception을 반환합니다.
        System.out.println(arrayDeque); // [10, 4, 3, 2, 1, 0]
        arrayDeque.offerLast(-1);
        System.out.println(arrayDeque); // [10, 4, 3, 2, 1, 0, -1]

        arrayDeque.push(22);
        System.out.println(arrayDeque); // [22, 10, 4, 3, 2, 1, 0, -1]

        System.out.println(arrayDeque.pop()); //22
        System.out.println(arrayDeque); // [10, 4, 3, 2, 1, 0, -1]

        System.out.println(arrayDeque.removeFirst()); // 첫번째 값을 제거하면서 그 값을 리턴
        System.out.println(arrayDeque.removeLast()); // 마지막 값을 제거하면서 그 값을 리턴
        System.out.println("romove와 poll이 차이가 있나? 출력 데이터는 동일");

        System.out.println(arrayDeque.pollFirst()); // 첫번째 값을 반환 및 제거하면서 그 값을 리턴
        System.out.println(arrayDeque.pollLast()); // 마지막 값을 반환 및 제거하면서 그 값을 리턴

        System.out.println(arrayDeque.peekFirst()); // 첫번째 값을 반환, 제거하지 않음
        System.out.println(arrayDeque.peekLast()); // 마지막 값을 반환, 제거하지 않음

        arrayDeque.clear();
        System.out.println(arrayDeque.isEmpty()); // true
    }
}

 

 

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

람다(Lambda)란?  (0) 2022.05.18
제네릭스(Generics) 란?  (0) 2022.05.18
Collection(1) (List, Set, Map)  (0) 2022.05.18
날짜, 시간  (0) 2022.05.18
예외, 에러 처리  (0) 2022.05.18

+ Recent posts