[Java] 자바 두 개의 스택(Stack)으로 큐(Queue) 구현하기

2022. 7. 17. 14:59·Java/자바 이론

스택은 많이 사용되는 자료구조 중 하나이다.

나중에 들어온 것이 먼저 나오는 구조로서

LIFO (Last In First Out)의 형태를 띈다.

 

2개의 스택을 활용해서 큐를 구현하는 방법을 알아보자.


1. 원리

 

스택을 하나 사용하면 LIFO지만, 2개의 스택을 사용해서 FIFO(First in First Out) 형태인 큐 자료구조를

구현할 수 있다.

 

스택과 큐에서 자료가 어떤 방식으로 들어오고(push) 나가는지(pop)만 이해하면 어렵지 않다.

스택 :   1, 2, 3을 push하고 pop하면 3, 2, 1 순으로 나오게 된다.

큐 : 1, 2, 3을 enqueue하고 dequeue하면 1, 2, 3 순으로 나오게 된다.

 

즉, 스택과 큐는 서로 역순(reverse)이다. 나오는 자료를 역순 뒤집어 주기만 하면

2개의 스택으로 하나의 큐를 구현할 수 있다.  

 


2. 수도 코드

1. Enqueue Operation

Push every input element to the Stack#1

2. Dequeue Operation

If(Stack#2 is empty)
       pop every element in the Stack#1
       and push them to the Stack#2 until Stack#1 is Empty
pop from Stack#2

 


3. 구현 예제

 

import java.util.Stack;

//2개의 Stack을 이용해서 Queue구현
class Qstack {
	Stack<Integer> oldStack;
	Stack<Integer> newStack;
	
	public Qstack() {
		oldStack = new Stack<>();
		newStack = new Stack<>();
	}
	
	public void enqueue(int a) {
		oldStack.push(a);
	}
	
	public int dequeue() {
		int result = -1;
		
		if(newStack.isEmpty()) {
			while(!oldStack.isEmpty()) {
				newStack.push(oldStack.pop());
			}
			result = newStack.pop();
		}
		
		 //oldStack에 남아있는 값이 있으면 다시 #1로 옮겨준다.
		if(!newStack.isEmpty()) {
			while(!newStack.isEmpty()) {
				oldStack.push(newStack.pop());
			}
		}
		
		return result;
	}
}	

public class Qs {
	public static void main(String[] args) {
		Qstack a = new Qstack();
		a.enqueue(1);
		a.enqueue(2);
		a.enqueue(3);
		
		System.out.println(a.dequeue());
		System.out.println(a.dequeue());
		System.out.println(a.dequeue());
	}
}

 

 

 


참고 문헌 : Do it! 자바 완전정복

 

스택오버플로우

https://stackoverflow.com/questions/69192/how-to-implement-a-queue-using-two-stacks/69436#69436

'Java > 자바 이론' 카테고리의 다른 글

[Java] 자바 GUI AWT 사용법 ( 간단한 채팅 프로그램 구현 )  (1) 2022.09.01
[Java] 자바 두 개의 큐(Queue)로 스택(Stack) 구현하기  (0) 2022.07.17
[Java] 자바 객체 정렬 Comparable과 Comparator의 이해  (0) 2022.07.09
[Java] 자바 제네릭(Generic)이란? (Feat. 오토박싱)  (0) 2022.07.09
[Java] 자바 컬렉션(Collection) 프레임워크란?  (0) 2022.07.06
'Java/자바 이론' 카테고리의 다른 글
  • [Java] 자바 GUI AWT 사용법 ( 간단한 채팅 프로그램 구현 )
  • [Java] 자바 두 개의 큐(Queue)로 스택(Stack) 구현하기
  • [Java] 자바 객체 정렬 Comparable과 Comparator의 이해
  • [Java] 자바 제네릭(Generic)이란? (Feat. 오토박싱)
현기
현기
  • 현기
    현기의 개발블로그
    현기
  • 전체
    오늘
    어제
    • 분류 전체보기 (120)
      • Front-End (39)
        • Next (5)
        • React (8)
        • React Native (11)
        • Flutter (0)
        • Vue (1)
        • JSP (9)
        • HTML, CSS, JS (5)
      • Back-End (16)
        • Node.js (3)
        • Spring (8)
        • Flask (1)
        • AWS (4)
      • DB (5)
        • Oracle (4)
        • MySQL (1)
      • Python (7)
      • Java (27)
        • 자바 이론 (17)
        • 코딩테스트 연습 & 실습 (10)
      • 자료구조 & 알고리즘 (7)
        • 코딩테스트 (6)
        • 알고리즘 (1)
      • 블록체인 (0)
      • 프롬프트 엔지니어링 (0)
      • CS 지식 (5)
      • IT뉴스 (0)
      • 일상 (3)
      • etc (11)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자바 스프링
    오라클
    스택
    React Native Chart
    next-intl
    큐
    쓰레드
    IS-A
    Python
    Express
    node.js
    React Native
    서블릿
    react-native-chart-kit
    Spring
    오블완
    자바
    REST API
    상속
    리액트 네이티브
    JSP
    react
    그리디
    DI
    티스토리챌린지
    포스트맨
    JDBC
    파이썬
    자바스크립트
    Java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
현기
[Java] 자바 두 개의 스택(Stack)으로 큐(Queue) 구현하기
상단으로

티스토리툴바