[Java] Stack와 Queue 차이

그동안 회사생활하느라 바쁘기도 하고 공부는 간간히 하고 있었지만 블로그에 작성할 시간이 없었다. 오늘은 오랜만에 스택과 큐 공부한 것에 대해서 작성을 해보고자 한다.

스택과 큐 같은 경우에는 학교에서 배우기도 하고 이미 알고 있었기도 했지만 자료구조 공부를 하면서 처음부터 차근차근 짚어보며 다시한번 공부해보고 싶었다.



스택과 큐의 차이점


Stack

Stack은 후입선출(LIFO : Last In First Out)의 자료구조를 구현한 클래스로 나중에 넣은 객체가 먼저 빠져나가는 구조이다.

데이터를 제한적으로 접근할 수 있는 구조 -> 한쪽 끝에서만 자료를 넣거나 뺄 수 있는 구조 가장 나중에 쌓은 데이터를 가장 먼저 빼낼 수 있는 데이터 구조

  • 대표적인 스택의 활용

컴퓨터 내부의 프로세스 구조의 함수 동작 방식

  • 주요 메소드

push() : 주어진 객체를 스택에 넣는다.

peek() : 스택의 맨 위 객체를 반환하고, 객체를 스택에서 제거 X

pop() : 스택의 맨 위 객체를 반환하고, 객체를 스택에서 제거 O

empty() : 스택이 비었다면 true 반환, 그렇지 않다면 false를 반환

search() : 해당 스택에서 전달된 객체가 존재하는 위치의 인덱스 반환

-스택의 장단점

장점 : 구조가 단순해서 구현이 쉬움, 데이터 저장/읽기 속도가 빠르다

단점 : 데이터 최대 갯수를 미리 정해야 함, 저장 공간의 낭비가 발생할 수 있음



Stack<E> stack = new Stack<E>();



Queue

Queue는 선입선출(FIFO : First On First Out)의 자료구조를 구현한 인터페이스로 먼저 넣은 객체가 먼저 빠져나가는 구조이다.

  • 주요 메소드

offer() : 주어진 객체를 넣는다.

peek() : 객체를 하나 반환하고, 객체를 큐에서 제거 X

poll() : 객체를 하나 반환하고, 객체를 큐에서 제거 O

remove() : 해당 큐의 맨 앞에 있는 요소를 제거

add() : 해당 큐의 맨 뒤에 전달된 요소 저장 후 저장이 성공하면 true 반환, 실패하면 illegalStateException 발생

element() : 해당 큐의 맨 앞에 있는 요소 반환

  • 큐의 대표적인 사용 사례

프로세스 스케줄링

대부분의 입출력

프린트 대기열



-큐의 구현 방법

정적 배열(Fixed Array) -> 구현이 상대적으로 쉬우나 인풋 사이즈를 미리 알아야 함

동적배열(Linked List) -> 구현이 상대적으로 어려우나 제한된 사이즈로부터 자유로움

-큐의 주요 기능

Enqueue -> 큐에 값을 집어넣는 함수

Dequeue -> 큐에 값을 빼내는 함수

Size -> 큐의 크기를 확인

Empty -> 큐가 비었는지 확인

Queue 인터페이스는 큐 메모리 구조를 표현하기 위해, Collection 인터페이스의 메소드만을 상속받아 사용한다.

Queue<E> queue = new LinkedList<E>();

Categories:

Updated: