Stack
Stack은 Last-In-First-Out(후입선출) 구조로, 주로 상자에 비유해서 설명한다. 상자에 물건을 넣고 빼는 것처럼 밑에서부터 위로 쌓아가고, 꺼낼 때는 위에서부터 꺼내는 형식이다.
데이터를 밀어넣는 push()와 데이터를 조회하는 peek(), 데이터를 꺼내는 pop() 기능이 주를 이룬다.
중복처리를 막거나 최근 저장된 데이터를 나열할 때 사용한다.
Stack<{참조 자료형}> {변수명} = new Stack<{참조 자료형}>();
Stack<Intager> intStack = new Stack<Integer>();
{변수명}.push({value});
intStack.push(1);
intStack.push(2);
intStack.push(3);
제일 위의 값 (= 가장 최근에 추가된 값)을 조회한다.
{변수명}.peek();
intStack.peek(); // [결과: 3]
단순히 지우는 것뿐만 아니라, 가장 최근 값을 반환한다.
{변수명}.pop();
intStack.pop(); // [결과: 3]
intStack.pop(); // [결과: 2]
Stack이 비어있는지비어있으면 참(True)을, 비어있지 않으면 거짓(False)을 반환한다.
{변수명}.isEmpty();
intStack.isEmpty(); // [결과: False]
Stack의 크기Stack의 크기 = Stack에 저장된 데이터의 양(개수)이다.
{변수명}.size();
intStack.size(); // [결과: 1]
Queue
Queue는 First-In-First-Out(선입선출) 구조로, Stack과는 달리 제일 밑에 저장된 데이터부터 꺼내는 형태이다.
데이터를 추가하는 add()와 데이터를 조회하는 peek(), 데이터를 꺼내는 poll() 기능이 주를 이룬다.
Queue는 생성자가 없어서 바로 생성할 수 없고, LinkedList를 통하여 생성할 수 있다.
생성할 때 Queue가 아닌 LinkedList를 사용함에 주의할 것. new Queue<{참조 자료형}>();의 형태가 아니다.
Queue<{참조 자료형}> {변수명} = new LinkedList<{참조 자료형}>();
Queue<Intager> intQueue = new LinkedList<Integer>();
{변수명}.add({value});
intQueue.add(1);
intQueue.add(2);
intQueue.add(3);
제일 아래의 값 (= 현재 시점에서 첫번째가 되는 값)을 조회한다.
{변수명}.peek();
intQueue.peek(); // [결과: 1]
단순히 지우는 것뿐만 아니라, 현재 시점에서 첫번째가 되는 값을 반환한다.
{변수명}.poll();
intStack.poll(); // [결과: 1]
intStack.poll(); // [결과: 2]
Queue가 비어있는지비어있으면 참(True)을, 비어있지 않으면 거짓(False)을 반환한다.
{변수명}.isEmpty();
intQueue.isEmpty(); // [결과: False]
Queue의 크기Queue의 크기 = Queue에 저장된 데이터의 양(개수)이다.
{변수명}.size();
intQueue.size(); // [결과: 1]
| Stack | vs | Queue | |
|---|---|---|---|
| 입출력 순서 | LIFO (후입선출) | FIFO (선입선출) | |
| 생성자 유무 | O | X (LinkedList 사용) | |
| 데이터 추가 | push() | add() | |
| 데이터 조회 | peek() | peek() | |
| 데이터 삭제 | pop() | poll() |