ssung_항해일지/CS 지식 및 기술면접

Stack & Queue

ssungcohol 2023. 7. 12. 17:22

Stack<E> (스택) 클래스

 

Stack 클래스는 List 컬렉션 클래스의 Vector 클래스를 상속받아, 전형적인 스택 메모리 구조의 클래스를 제공

스택 메모리 구조는 선형 메모리 공간에 데이터를 저장하면서 후입선출 (LIFO - Last In First Out)의 시멘틱을 따르는 자료 구조

즉, 가장 나중에 저장된(push) 데이터가 가장 먼저 인출(pop)되는 구조

http://www.tcpschool.com/java/java_collectionFramework_stackQueue


스택은 단순히 stack만 import 해주어도 사용 가능

스택에 원소를 삽입하는 함수로는 push()가 있고, peek()을 통해 다음에 빼낼 원소를 조회할 수 있고, pop()을 통해 원소를 빼낼 수 있음

import java.util.Stack;

Stack<Integer> stack = new Stack<>();  // 스택 객체 생성

stack.push(1);  // push: 스택에 1 삽입
stack.push(9);  // push: 스택에 9 삽입
stack.push(13);  // push: 스택에 13 삽입

System.out.println("Stack : " + stack);
// Stack : [1, 9, 13]

int peek = stack.peek();  // peek : 다음에 빼낼(맨 뒤) 원소 조회;
System.out.println("peek : " + peek);
// peek : 13

System.out.println("Stack : " + stack);
// Stack : [1, 9, 13]

int pop = stack.pop();  // pop : 맨 뒤의 원소 빼냄;
System.out.println("pop : " + pop);
// pop : 13

System.out.println("Stack : " + stack);
Stack : [1. 9]

pop = stack.pop();  // pop : 맨 뒤의 원소 빼냄
System.out.println("pop : " + pop);
// pop : 9

System.out.println("Stack : " + stack)
// Stack : [1]

Queue<E> (큐) 인터페이스

 

클래스로 구현된 스택과는 달리 자바에서 큐 메모리 구조는 별도의 인터페이스 형태로 제공

이러한 Queue 인터페이스를 상속받는 하위 인터페이스는 아래와 같다.

 

1.  Deque<E>

2. BlockingDeque<E>

3. BlockingQueue<E>

4. TransferQueue<E>

 

따라서 Queue 인터페이스를 직간접적으로 구현한 클래스는 상당히 많음

그 중에서도 Deque 인터페이스를 구현한 LinkedList 클래스가 큐 메모리 구조를 구현하는데 가장 많이 사용

 

큐 메모리 구조는 선형 메모리 공간에 데이터를 저장하면서 선입선출 (FIFO - First In First Out) 시멘틱을 따르는 자료구조

즉, 가장 먼저 저장된 (push) 데이터가 가장 먼저 인출(pop) 되는 구조

http://www.tcpschool.com/java/java_collectionFramework_stackQueue


큐는 LinkedList를 이용하여 구현되어있기 때문에 Queue와 LinkedList 모두 import를 해주어야 사용 가능

큐에 원소를 삽입하는 함수는 offer()와 add()가 있고, peek()을 통해 다음에 빼낼 원소를 조회할 수 있으며, pull()과 remove()를 통해 원소를 빼낼 수 있음

import java.util.LinkedList;
import java.util.Queue;

Queue<Integer> queue = new LinkedList<>();  // 큐 객체 생성

queue.offer(10);  // offer : 큐에 10 삽입
queue.offer(5);  // offer : 큐에 5 삽입
System.out.println("Queue : " + queue);
// Queue : [10, 5]

queue.add(25);  // add : 큐에 25 삽입
queue.add(99);  // add : 큐에 99 삽입
System.out.println("Queue : " + queue);
// Queue : [10, 5, 25, 99]

int peek = queue.peek();  // peek : 다음에 빼낼 (맨 앞) 원소 조회
System.out.println("peek : " + peek);
// peek : 10

System.out.println("Queue : " + queue);
// Queue : [10, 5, 25, 99]

int poll = queue.poll();  // poll : 맨 앞의 원소 빼냄
System.out.println("poll : " + poll);
// poll : 10

System.out.println("Queue : " + queue);
// Queue : [5, 25, 99]

int remove = queue.remove();  // remove : 맨 앞의 원소 빼냄
System.out.println("remove : " + remove);
// remove : 5

System.out.println("Queue : " queue):
// Queue : [25, 99]

<참고>

https://dev-note-97.tistory.com/5

 

728x90