Stack & Queue

LEEEEEEE·2023년 9월 20일

Java

목록 보기
2/8

Stack & Queue

Stack 특징

맨 마지막 위치에서만 자료를 추가, 삭제, 꺼내올 수 있음(중간의 자료를 꺼낼수는 없다)
LIFO구조(후입선출)
가장 최근의 자료를 찾아오거나 게임에서 히스토리를 유지하고 이를 무를 때 사용할 수 있음

Queue 특징

맨 앞에서 자료를 꺼내거나 삭제하고, 맨 뒤에서 자료를 추가 함
FIFO구조(선입선출)
순차적으로 입력된 자료를 순서대로 처리하는데 많이 사용되는 자료구조

Queue에서 LinkedList가 효율적인 이유

  1. 삽입 및 삭제의 효율성
    'LinkedList'는 노드 간에 링크를 통해 요소에 연결되어있으므로 요소를 추가하거나 제거할 때 'ArrayList'보다 효율적 -> 'ArrayList'의 경우 중간 또는 맨 앞에서 요소를 삭제하려면 해당 요소 이후의 모든 요소를 이동시켜야 하므로 상대적으로 비효율적
  2. 크기의 가변성
    'LinkedList'는 크기가 동적으로 조절되는 구조로 크기가 자동으로 조절되어 메모리를 효율적으로 사용하지만 'ArrayList'는 초기용량을 지정해야하므로 크기를 초과하는 요소를 추가할 경우 용량을 늘려야하므로 일부 오버헤드가 발생할 수 있다
  3. 다양한 큐 구현
    'LinkedList'는 양쪽 끝에서 요소를 추가하고 제거할 수 있는 'Deque'인터페이스를 구현하는데 유용하다

Stack 메서드

  • push(element): 스택에 요소를 추가합니다. 스택의 맨 위에 새로운 요소가 추가됩니다.
	stack.push("Apple");
  • pop(): 스택에서 맨 위의 요소를 제거하고 반환합니다.
 	String poppedElement = stack.pop();
        System.out.println("Popped Element: " + poppedElement);
  • peek(): 스택에서 맨 위의 요소를 반환하지만 제거하지는 않습니다. 스택의 맨 위 요소를 확인할 때 사용됩니다.
	String topElement = stack.peek();
        System.out.println("Top Element: " + topElement);
  • isEmpty(): 스택이 비어있는지 확인합니다.
	boolean isEmpty = stack.isEmpty();
        System.out.println("Is Stack Empty? " + isEmpty);
  • size(): 스택의 현재 크기를 반환합니다.
	int size = stack.size();
        System.out.println("Stack Size: " + size);

Queue 메서드

  • enqueue(element): 큐에 요소를 추가합니다. 큐의 뒤쪽에 새로운 요소가 추가됩니다.
	queue.add("Apple");
  • dequeue(): 큐에서 맨 앞의 요소를 제거하고 반환합니다.
	String dequeuedElement = queue.poll();
        System.out.println("Dequeued Element: " + dequeuedElement);
  • peek(): 큐에서 맨 앞의 요소를 반환하지만 제거하지는 않습니다. 큐의 맨 앞 요소를 확인할 때 사용됩니다.
	String frontElement = queue.peek();
        System.out.println("Front Element: " + frontElement);
  • isEmpty(): 큐가 비어있는지 확인합니다.
	boolean isEmpty = queue.isEmpty();
        System.out.println("Is Queue Empty? " + isEmpty);
  • size(): 큐의 현재 크기를 반환합니다.
	int size = queue.size();
        System.out.println("Queue Size: " + size);

Stack 테스트 코드
Queue 테스트 코드

profile
한단계씩 성장하고 싶은 개발자

0개의 댓글