[자료구조] 스택과 큐

2024. 12. 13. 17:15·자료구조

스택

 

젠가를 떠올려보자. 젠가 케이스에 젠가를 정리해서 넣었다면 꺼내려고 할 때 위에서부터 하나씩 꺼내야 할 것이다.

 

이처럼 데이터를 넣는 곳과 빠지는 곳의 위치가 같은 자료구조를 스택이라고 한다. 이런 구조를 후입선출 구조 (LIFO; Last In First Out)라고 한다.

스택이 비어있을 때 데이터를 꺼내려고 시도하면 스택 언더플로우(Stack Underflow)가 발생하고, 스택이 꽉 차있을 때 자료를 넣으려고 하면 스택 오버플로우(Stack Overflow)가 발생한다.

 

자바에서는 크게 5가지 메서드를 사용한다

  • push(x), add(x) : x를 스택의 맨 위에 쌓는다.
    • push() 메서드는 자바의 스택 클래스에서 제공하며 추가한 객체를 리턴한다. add() 는 List 클래스에서 제공하며 성공여부 (boolean)을 리턴한다. 스택을 사용할 때는 push를 사용하는 것을 권장한다!
  • size() : 스택에 쌓인 블럭의 개수를 반환한다.
  • isEmpty() : 스택이 비어있다면 true, 비어있지 않다면 false를 반환한다.
  • peek() : 스택의 맨 위에 있는 데이터를 반환한다.
  • pop() : 스택의 맨 위에 있는 데이터를 반환함과 동시에 스택에서 꺼낸다.

 

대부분의 연산들은 TOP 영역에서 진행되기 때문에 시간복잡도가 O(1)이 된다. 하지만 serach() 메서드는 특정 데이터를 찾을 때까지 수행하므로 O(n)의 시간복잡도를 갖는다.


큐

편의점 음료수 진열대를 생각해 보자. 점원이 음료수를 냉장고 뒤에서 넣은 걸 우리는 제일 앞에서부터 구매하게 된다.

 

스택 자료구조와는 다르게 먼저 들어온 데이터가 가장 먼저 나가는 구조이다. 이런 구조를 선입선출 (FIFO; First In First Out) 구조라고 한다. 큐 자료구조는 이 선입선출 구조를 따르고 있다.

 

 

자바에서 자주 사용하는 메서드들이다.

  • offer(x), add(x) : 큐에 값을 넣는다.
    • 큐 용량 초과 등의 이유로 값을 넣지 못했을 때, add() 메서드는 예외를 발생시키고 offer() 메서드는 false를 리턴한다.
  • size() : 큐에 들어있는 데이터의 개수를 반환한다.
  • isEmpty() : 큐에 데이터가 있다면 false, 없다면 true를 반환한다.
  • peek() : 큐의 맨 앞에 있는 데이터를 반환한다.
  • poll() : 큐의 맨 앞에 있는 데이터를 반환함과 동시에 큐에서 삭제한다.

 

 

자바에서 큐는 보통 ArrayDeque와 LinkedList로 구현하게 되는데 각각 배열의 특성, List의 특성을 가진다.

큐 자료구조 특성 상, 삽입과 삭제는 양 끝단에서만 일어난다. 중간에서 삽입되거나 삭제되는 경우가 없기 때문에 ArrayDeque가 배열의 특성을 가져도 시간복잡도 O(1)으로 리스트와 별 차이가 없게 된다.

또한 다음 노드에 대한 참조를 유지할 필요가 없기 때문에 더 적은 메모리를 사용한다! 알고리즘 문제풀이에 큐를 쓰면 LinkedList로 구현했었는데 ArrayDeque를 사용해야겠다..

'자료구조' 카테고리의 다른 글

[자료구조] 배열 Array  (0) 2025.04.03
[자료구조] 연결리스트  (0) 2025.04.03
[자료구조] 해시(Hash), 그리고 JAVA  (0) 2024.08.13
'자료구조' 카테고리의 다른 글
  • [자료구조] 배열 Array
  • [자료구조] 연결리스트
  • [자료구조] 해시(Hash), 그리고 JAVA
의중
의중
  • 의중
    개발어려워
    의중
  • 전체
    오늘
    어제
    • 전체글 (30) N
      • Algorithm (12)
      • SSAFY (1)
      • 자료구조 (4)
      • 운영체제 (2)
      • JAVA (2)
      • ML, DL (0)
      • BackEnd (4)
      • DevOps (1)
      • 네트워크 (3)
      • DB, SQL (1) N
  • hELLO· Designed By정상우.v4.10.3
의중
[자료구조] 스택과 큐
상단으로

티스토리툴바