파트5. Stack,Queue,Deque(스택,큐,디큐)

유태형·2022년 5월 18일
0

알고리즘 - Java

목록 보기
10/32

출처

해당 게시글은 [Java] 어서와! 자료구조 알고리즘은 처음이지?https://programmers.co.kr/learn/courses/13577를 간략히 요약한 게시글이며 모든 출처는 해당강의에 있습니다.




4-1

앞에서 부터 뒤로 데이터를 삽입하는것은 동일하지만, 데이터를 꺼낼때 앞에서 부터 꺼내느냐 뒤에서 부터 꺼내느냐에 따라 QueueStack이 달라집니다.

  • Queue : 데이터를 앞에서 부터 꺼냄
  • Stack : 데이터를 뒤에서 부터 꺼냄

가장 먼저 들어간 데이터가 가장 앞으로 가고 가장 나중에 들어온 데이터가 가장 뒤로 가지만, 뒤에서 부터 데이터를 꺼낸다면 가장 최근인 순으로 데이터들이 나오게 됩니다.

가장 먼저 들어간 데이터가 가장 앞으로 가고 가장 나중에 들어온 데이터가 가장 뒤로 가는것과 같이, 앞에서 부터 데이터를 꺼낸다면 가장 오래된 순으로 데이터들이 나오게 됩니다.




4-2

LinkedList로 구현

Queue 구현하기

        List<Integer> list = new LinkedList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);

        System.out.println(list);
        
        //큐
        System.out.println(list.remove(0);
        System.out.println(list);

        System.out.println(list.remove(0);
        System.out.println(list);

        System.out.println(list.remove(0);
        System.out.println(list);

큐 부분과 스택 부분을 번갈아 주석처리 해보면 됩니다.

Queue는 가장 앞부분의 데이터를 꺼내야 하므로 0번째 인덱스데이터를 제거하면서 출력하였습니다.

Stack 구현하기

		List<Integer> list = new LinkedList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);

        System.out.println(list);
        
		//스택
        System.out.println(list.remove(list.size()-1));
        System.out.println(list);

        System.out.println(list.remove(list.size()-1));
        System.out.println(list);

        System.out.println(list.remove(list.size()-1));
        System.out.println(list);

Stack는 가장 뒷부분의 데이터를 꺼내야 하므로 마지막 인덱스데이터를 제거하면서 출력하였습니다.



큐 구현

큐는 마지막에 데이터를 삽입하고 맨 앞의 데이터부터 삭제 합니다.

		Queue<Integer> queue = new LinkedList<>();
        queue.offer(1);
        queue.offer(2);
        queue.offer(3);
        queue.offer(4);
        queue.offer(5);

        System.out.println(queue);
        queue.poll();
        System.out.println(queue);
        queue.poll();
        System.out.println(queue);
        queue.poll();
        System.out.println(queue);
        System.out.println(queue.peek());
        System.out.println(queue);
  • add(e) : 마지막에 데이터 추가, 안될시 에러
  • remove() : 첫번째 데이터 출력 후 삭제, 안될시 에러
  • element() : 첫번째 데이터 단순 출력, 안될 시 에러
  • offer(e) : 마지막에 데이터 추가, 안될시 0값
  • poll() : 첫번째 데이터 출력 후 삭제, 안될시 0값
  • peek() : 첫번째 데이터 단순 출력, 안될시 0값


스택 구현

스택은 마지막에 데이터를 삽입하고 마지막의 데이터부터 삭제 합니다.

		Stack<Integer> stack = new Stack<>();

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

        System.out.println(stack);

        stack.pop();
        System.out.println(stack);
        stack.pop();
        System.out.println(stack);
        System.out.println(stack.peek());
        System.out.println(stack);
        stack.pop();
        System.out.println(stack);
  • push(e) : 마지막에 데이터 추가
  • pop() : 마지막 데이터 출력 후 삭제
  • peek() : 마지막 데이터 단순 출력


디큐 구현

디큐는 처음과 마지막에 선택하여 데이터를 삽입하고, 처음과 마지막에 선택하여 데이터를 삭제합니다.

		Deque<Integer> deque = new LinkedList<>();

        deque.offerFirst(1);
        System.out.println(deque);

        deque.offerLast(2);
        System.out.println(deque);

        deque.offerFirst(3);
        System.out.println(deque);

        deque.offerLast(4);
        System.out.println(deque);

        deque.pollFirst();
        System.out.println(deque);

        deque.pollFirst();
        System.out.println(deque);
  • offerFirst(e) : 맨 앞에 데이터 추가
  • pollFirst() : 맨 앞의 데이터 출력 후 삭제
  • peekFrist() : 맨 앞의 데이터 단순 출력
  • offerLast(e) : 맨 뒤에 데이터 추가
  • pollLast() : 맨 뒤에 데이터 출력 후 삭제
  • peekLast() : 맨 뒤에 데이터 단순 출력



소스코드

package StackQueue스택큐;

import java.util.*;

// Queue : offer(e), poll(), peek() : 들어간 순서대로
// Stack : push(e), pop(), peek() : 들어간 반대로
// DeQueue : offerFirst(e), pollFirst(), peekFirst(), offerLast(e), pollLast(), peekLast()

public class StackQueue실습 {
    public static void main(String[] args) {
        List<Integer> list = new LinkedList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);

        System.out.println(list);
        //큐
//        System.out.println(list.remove(0);
//        System.out.println(list);
//
//        System.out.println(list.remove(0);
//        System.out.println(list);
//
//        System.out.println(list.remove(0);
//        System.out.println(list);

        //스택
        System.out.println(list.remove(list.size()-1));
        System.out.println(list);

        System.out.println(list.remove(list.size()-1));
        System.out.println(list);

        System.out.println(list.remove(list.size()-1));
        System.out.println(list);



        //큐
        //add(e), remove(), element() == 못할시 에러
        //offer(e) poll() peek() == 못할시 0값
        Queue<Integer> queue = new LinkedList<>();
        queue.offer(1);
        queue.offer(2);
        queue.offer(3);
        queue.offer(4);
        queue.offer(5);

        System.out.println(queue);
        queue.poll();
        System.out.println(queue);
        queue.poll();
        System.out.println(queue);
        queue.poll();
        System.out.println(queue);
        System.out.println(queue.peek());
        System.out.println(queue);


        //스택
        //push(e), pop(), peek()
        Stack<Integer> stack = new Stack<>();

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

        System.out.println(stack);

        stack.pop();
        System.out.println(stack);
        stack.pop();
        System.out.println(stack);
        System.out.println(stack.peek());
        System.out.println(stack);
        stack.pop();
        System.out.println(stack);

        //디큐
        //offerFIrst(e), pollFirst(), peekFirst(), offerLast(e), pollLast(), peekLast()
        Deque<Integer> deque = new LinkedList<>();

        deque.offerFirst(1);
        System.out.println(deque);

        deque.offerLast(2);
        System.out.println(deque);

        deque.offerFirst(3);
        System.out.println(deque);

        deque.offerLast(4);
        System.out.println(deque);

        deque.pollFirst();
        System.out.println(deque);

        deque.pollFirst();
        System.out.println(deque);
    }
}



GitHub

https://github.com/ds02168/Study_Algorithm/blob/master/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/%5BJava%5D%20%EC%96%B4%EC%84%9C%EC%99%80%20%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EC%9D%80%20%EC%B2%98%EC%9D%8C%EC%9D%B4%EC%A7%80/%ED%8C%8C%ED%8A%B85.Stack%2CQueue%2CDeque(%EC%8A%A4%ED%83%9D%2C%ED%81%90%2C%EB%94%94%ED%81%90)/StackQueue%EC%8B%A4%EC%8A%B5.java

profile
오늘도 내일도 화이팅!

0개의 댓글