발걸음/일지

[자료구조]Stack

리꾸므 2022. 11. 20. 12:12

Stack

 데이터를 순서대로 쌓는 자료구조이다. 가장 먼저 들어간 자료가 가장 나중에 나올 수 있고, 가장 나중에 들어간 자료가 가장 먼저 나올 수 있다.

  • 입력과 출력이 하나의 방향으로 이루어지는 제한적 접근이다.
  • 이런 자료구조 정책을 LIFO(Last In First Out) 혹은 FILO(First In Last Out)이라고도 부른다.
  • 데이터를 넣는 것을 'PUSH', 데이터를 꺼내는 것을 'POP'이라고 한다.

 

 

 Stack 특징

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

stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
---------------------------
1 <- 2 <- 3 <- 4
---------------------------

stack.pop();
stack.pop();
stack.pop();
stack.pop();
---------------------------
4, 3, 2, 1
---------------------------

  1. LIFO

   먼저 들어간 데이터는 제일 나중에 나오는 후입선출의 구조이다.

  2. 데이터는 하나씩 넣고 뺄 수 있다.

   아무리 많은 데이터가 있어도 하나씩 넣고 뺄 수 있다. 한꺼번에 여러개를 넣거나 뺄 수 없다.

  3. 하나의 입출력 방향을 가지고 있다.

   만약 입출력 방향이 여러개라면 Stack자료구조로 볼 수 없다.

 

 

 Stack 실사용 예제

  • 브라우저에서 뒤로가기 앞으로가기가, Stack을 통해 다음과 같은 순서로 작동한다.
    1. 새로운 페이지 접속할 때, 현재 페이지를 Prev Stack에 보관한다.
    2. 뒤로 가기버튼을 눌러 이전 페이지로 돌아갈 때, 현재 페이지를 Next Stack에 보관, PRev Stack에 가장 나중에 보관된 페이지를 현재페이지로 가져온다.
    3. 앞으로 가기 버튼을 눌러 앞서 방문한 페이지로 이동을 원할때에는, Next Stack의 가장 마지막으로 보관된 페이지를 가져온다.
    4. 마지막으로 현재 페이지를 Prev Stack에 보관한다.