상세 컨텐츠

본문 제목

[Queue] 스택을 이용한 큐 구현

본문

스택 선언, 초기화

public class QueueUsingStack<T> {

  Stack<T> s1;
  Stack<T> s2;

  public QueueUsingStack(int maxSize) {
    this.s1 = new Stack<>(maxSize);
    this.s2 = new Stack<>(maxSize);
  }

enqueue 구현

  • Stack1에 값을 push 합니다.
    public void enqueue(T value) {
      s1.push(value);
    }

dequeue 구현

  • 조건 1 : Stack1, Stack2 비어있는 경우
    • null 값을 반환합니다.
  • 조건 2 : Stack2 비어있는 경우
    • Stack1 모든 값을 Stack2로 push 하여 옮깁니다. 완료되면 Stack2 pop 하여 값을 반환합니다.
  • 조건 3 : Stack2 비어있지 않은 경우
    • Stack2 pop 하여 값을 반환합니다.
  public T dequeue() {
    if (isEmpty()) {
      return null;
    } else if (s2.isEmpty()) {
      while (!s1.isEmpty()) {
        s2.push(s1.pop());
      }
      return s2.pop();
    } else {
      return s2.pop();
    }
  }

  public boolean isEmpty() {
    if (s1.isEmpty() && s2.isEmpty()) {
      return true;
    }
    return false;
  }

실행결과

  public static void main(String args[]) {
    QueueUsingStack<Integer> q = new QueueUsingStack(4);
    q.enqueue(1);
    q.enqueue(2);
    q.enqueue(3);
    System.out.println(q.dequeue());
    System.out.println(q.dequeue());
    System.out.println(q.dequeue());
    System.out.println(q.dequeue());
    q.enqueue(1);
    q.enqueue(2);
    System.out.println(q.dequeue());
    System.out.println(q.dequeue());
    System.out.println(q.dequeue());
  }
1
2
3
null
1
2
null

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

[Graph] 특징  (0) 2020.04.14
[Stack] 스택 정렬  (0) 2020.04.05
[Queue] 기본 구현 enqueue, dequeue  (0) 2020.04.04
[Queue] reverse k  (0) 2020.04.04
[Stack] 두 개의 스택  (0) 2020.04.03

관련글 더보기

댓글 영역