[자료구조]Stack, Queue

정동아·2023년 5월 12일
0

백엔드 부트캠프

목록 보기
22/41

Stack

Data를 순서대로 쌓는 자료구조이다. 그렇기때문에 후입 선출의 구조를 가지고 있다.
한번에 하나의 데이터만 삽입/제거가 가능하며, 하나의 입출력 방향을 가지고 있다. (제한적 접근)

  • Push : Stack에 데이터를 넣을 때
  • Pop : Stack에 있는 데이터를 꺼낼 때

Stack의 특징

  • 저장된 데이터를 가져오는 속도가 매우 빠르다.
    스택에서 데이터를 삽입하거나 삭제할 때, 모든 데이터를 순회할 필요가 없기 때문이다.
  • 별도의 라이브러리나, 모듈을 설치할 필요가 없다.
  • 크기 제한이 없기때문에 메모리 사용량이 불필요하게 증가할 수 있다.
    그래서 미리 스택의 크기를 정해두거나, 동적으로 크기를 조절하는 방법을 사용해야한다.
  • JAVA에서 제공하는 Stack클래스 한정으로, 크기를 동적으로 조정하지 않는다.
  • JAVA에서 제공하는 Stack클래스 한정으로, 중간에서 데이터를 삽입, 삭제할 수 있다.
    Stack 클래스는 Vector 클래스를 상속받아 구현되어있기 때문이다.

stack을 사용하는 대표적인 예는 브라우저에서 이전,앞으로가기 페이지 이동을 할 때이다.

  1. 새로운 페이지로 접속할 때, 현재 페이지를 Prev Stack에 보관한다.
  2. 뒤로 가기 버튼을 누르면, 현재 페이지를 Next Stack에 보관하고 Prev Stack에 가장 나중에 보관된 페이지를 현재 페이지로 가져옵니다.
  3. 앞으로 가기 버튼을 누르면, Next Stack의 가장 마지막으로 보관된 페이지를 가져옵니다.
  4. 마지막으로 현재 페이지를 Prev Stack에 보관한다.

Queue

먼저 들어간 데이터가 먼저 나오는 구조이다.
data가 입력된 순서대로 처리할 때 주로 사용하며, 한번에 하나의 데이터만 삽입 / 제거 가능하다. 또한 두개의 입출력 방향을 가지고 있다. (입출력 방향이 하나면 나중에 들어온게 먼저 나가야함 ex_프링글스)

  • Add : Queue에 데이터를 넣을 때
  • Poll : Queue에 있는 데이터를 꺼낼 때(반환하고 제거함)

Queue의 특징

  • Queue에 데이터를 삽입하는 순서와 삭제하는 순서사 동일하게 유지되어야하기 떄문에, 데이터 처리나 작업처리에서 순서가 중요한 경우에 유용하다.
  • 그렇기때문에 중간에 있는 데이터를 조회하거나 수정하는 연산에는 적합하지않다.
  • 삽입/삭제가 빈번하게 일어나는 상황에서 상대적으로 빠른 속도를 보이기 때문에 데이터나 작업을 차례대로 처리해야하는 상황에서 효과적으로 사용될 수 있다.
  • 별도의 라이브러리나, 모듈을 설치할 필요가 없다.
  • 크기 제한이 없어 메모리 낭비가 발생할 수 있다.
    크기 제한이 있게 구현하려면 Queue인터페이스를 사용하지 않고 직접 구현하거나, 기존의 Queue인터페이스를 상속받아 크기 제한을 추가한 클래스를 구현해야한다.
  • Java에서 제공하는 Queue 인터페이스의 경우 iterator() 메서드가 지원되지 않는다.
  • Java에서 제공하는 Queue 인터페이스의 경우 remove(Object o) 메서드의 동작이 불명확하다.
    poll()메서드를 사용하면 원하는 객체를 삭제할 수 있다.

0개의 댓글