Skip to content

Latest commit

 

History

History
41 lines (27 loc) · 3.44 KB

File metadata and controls

41 lines (27 loc) · 3.44 KB

Stack, Queue

스택(Stack)과 큐(Queue)는 자료구조 중 가장 기본적이고 널리 사용되는 구조입니다. 둘 다 데이터를 저장하고 처리하는 방법을 제공하지만, 그 구조와 동작 방식에 차이가 있습니다.

스택(Stack)은 LIFO(Last-In-First-Out) 구조로, 마지막에 추가된 데이터가 가장 먼저 삭제됩니다. 스택에서 데이터는 항상 한 쪽 끝에서만 추가/삭제됩니다. 이를 "push"와 "pop"이라고 합니다. push는 데이터를 스택의 맨 위에 추가하고, pop은 스택의 맨 위에 있는 데이터를 삭제합니다. 스택은 주로 함수 호출, 역추적, 브라우저의 뒤로/앞으로 기능 등에 사용됩니다.

반면, 큐(Queue)는 FIFO(First-In-First-Out) 구조로, 처음에 추가된 데이터가 가장 먼저 삭제됩니다. 큐에서 데이터는 한 쪽 끝에서 추가되고, 반대쪽 끝에서 삭제됩니다. 이를 "enqueue"와 "dequeue"라고 합니다. enqueue는 데이터를 큐의 뒤쪽에 추가하고, dequeue는 큐의 앞쪽에 있는 데이터를 삭제합니다. 큐는 대기열, 작업 처리 등에 사용됩니다.

따라서, 스택과 큐는 데이터의 추가와 삭제 방법에서 차이가 있습니다. 스택은 마지막에 추가된 데이터를 가장 먼저 삭제하고, 큐는 처음에 추가된 데이터를 가장 먼저 삭제합니다. 이러한 차이로 인해, 스택과 큐는 서로 다른 용도로 사용됩니다.


##java에서 정의한 메소드들

Stack 클래스

  • push(E item): 스택의 맨 위에 요소를 추가합니다.
  • pop(): 스택의 맨 위에 있는 요소를 제거하고 반환합니다.
  • peek(): 스택의 맨 위에 있는 요소를 반환합니다. 스택에서 제거하지는 않습니다.
  • empty(): 스택이 비어있는지 여부를 반환합니다.
  • search(Object o): 스택에서 주어진 요소의 위치를 반환합니다. 찾지 못한 경우 -1을 반환합니다.

Queue 인터페이스

  • add(E e): 큐에 요소를 추가합니다.
  • offer(E e): 큐에 요소를 추가합니다.
  • remove(): 큐의 맨 앞에 있는 요소를 제거하고 반환합니다. 큐가 비어있을 경우 예외를 발생시킵니다.
  • poll(): 큐의 맨 앞에 있는 요소를 제거하고 반환합니다. 큐가 비어있을 경우 null을 반환합니다.
  • element(): 큐의 맨 앞에 있는 요소를 반환합니다. 큐에서 제거하지 않습니다. 큐가 비어있을 경우 예외를 발생시킵니다.
  • peek(): 큐의 맨 앞에 있는 요소를 반환합니다. 큐에서 제거하지 않습니다. 큐가 비어있을 경우 null을 반환합니다.

Queue 를 구현한 클래스

java.util.Queue 인터페이스를 구현하는 대표적인 클래스로는 LinkedList, ArrayDeque, PriorityQueue 등이 있습니다.

  • LinkedList: 이중 연결 리스트 구조를 사용하여 큐를 구현한 클래스입니다. 큐의 앞쪽에서 데이터를 삭제하거나 뒤쪽에서 데이터를 추가할 수 있습니다.
  • ArrayDeque: 동적 배열 구조를 사용하여 큐를 구현한 클래스입니다. 큐의 앞쪽과 뒤쪽에서 모두 데이터를 추가하거나 삭제할 수 있습니다.
  • PriorityQueue: 우선순위 큐를 구현한 클래스로, 우선순위가 높은 데이터가 먼저 삭제됩니다.

이 외에도 다양한 큐 구현 클래스들이 있습니다. 사용 목적에 맞는 클래스를 선택하여 적절하게 활용할 수 있습니다