상세 컨텐츠

본문 제목

[Queue] 기본 구현 enqueue, dequeue

본문

Queue 기본 구현

public class Queue<T> {
  private int maxSize;
  private T[] array;
  private int front;
  private int back;
  private int currentSize;

  public Queue(int maxSize){
    this.maxSize = maxSize;
    array = (T[]) new Object[maxSize];
    front = 0;
    back = -1;
    currentSize = 0;
  }

  public int getMaxSize(){
    return maxSize;
  }

  public int getCurrentSize(){
    return currentSize;
  }

  public T top(){
    return array[front];
  }

  public boolean isEmpty(){
    return currentSize == 0;
  }

  public boolean isFull(){
    return currentSize == maxSize;
  }
}

enqueue, dequeue에 따른 구조 변화

enqueue

  • back = (back + 1) % maxSize
    (back+1) 값이 maxSize와 동일하다면 back 변수 값은 0을 의미한다. (그림 9)

  • enqueue에 back 변수가 +1 된다.

  • enqueue에 currentSize +1 된다.

    public void enqueue(T val){
      if(isFull())
        return;
    
      back = (back + 1) % maxSize;
      array[back] = val;
      currentSize++;
      printQueue();
    }

dequeue

  • front = (front + 1) % maxSize
    (front+1) 값이 maxSize와 동일하다면 front 변수 값은 0을 의미한다.

  • dequeue에 front 변수가 +1 된다.

  • dequeue에 currentSize -1 된다.

    public T dequeue(){
      if(isEmpty())
        return null;
    
      T temp = array[front];
      front = (front + 1) % maxSize;
      currentSize--;
      printQueue();
    
      return temp;
    }

정리하며

enqueue, dequeue 과정에서 Queue의 구조와 객체 인스턴스에 할당된 값들이 어떻게 변화되는지 이해하기 위한 목적으로 정리하였습니다. 잘못된 내용이 있는 경우 언제든 조언을 해주시면 감사하겠습니다.

'기록 - 프로그래밍 > 자료구조&알고리즘' 카테고리의 다른 글

[Stack] 스택 정렬  (0) 2020.04.05
[Queue] 스택을 이용한 큐 구현  (0) 2020.04.05
[Queue] reverse k  (0) 2020.04.04
[Stack] 두 개의 스택  (0) 2020.04.03
[Stack] 배열 구현  (0) 2020.03.30

관련글 더보기

댓글 영역