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() |