개발 일지/CS

[자료구조] 스택(Stack)

미숫가루설탕많이 2023. 1. 16. 10:22

 스택(stack)이란 후입선출의 특성을 갖는 자료구조이며, 한쪽 끝에서부터 데이터(data)를 순서대로 쌓고 쌓은 부분부터 데이터를 뺄 수 있는 선형 구조로 되어 있다.

 

 프링글스를 예로 들면, 과자를 포장할 때 과자는 포장할 때 맨 밑부터 차곡차곡 쌓이게 된다. 그리고 먹을 때는 제일 마지막에 들어온 과자부터 하나씩 꺼내서 먹게 된다.

 

 프링글스는 가장 먼저 들어간 과자는 제일 나중에 나오고, 가장 마지막에 들어간 과자가 제일 먼저 나오게 되므로 스택의 특성에 알맞을 예시라고 볼 수 있다.

 

 이렇게 스택은 입력과 출력이 한 방향으로 이루어진다는 제한적 접근의 특징이 있다. 이런 스택의 자료구조 정책을 LIFO(Last In First Out) 혹은 FILO(First In Last Out)이라고 부르기도 한다.

 

이때, 스택에 데이터를 넣는 것을 'PUSH', 데이터를 꺼내는 것을 'POP'이라고 한다.

 

 스택은 완전히 꽉 차있을 때 'Overflow'상태라고 하고 비어있으면 'Underflow'상태라고 한다.

 

 브라우저의 뒤로 가기, 앞으로 가기 기능이나 실행취소(ctrl + z)를 생각해보면 이해하기가 쉬웠다.

 

 

 

 

특징

 

  • 데이터는 하나씩 넣고 뺄 수 있다. 즉, 여러 개를 한번에 넣거나 뺄 수 없다.

  • 하나의 입출력 방향을 갖고 있다. 즉, 입출력 방향이 여러 개라면 Stack 자료구조라고 볼 수 없다.

 

 

 

 

키워드

 

  • push
    : 스택 맨 위에 데이터 추가

  • pop
    : 스택 맨 위의 데이터 삭제하고 리턴

  • isEmpty
    : 스택이 비어있는지 확인

  • isFull
    : 스택이 가득 차있는지 확인

  • peek
    : 가장 나중에 추가된 데이터 리턴

  • size
    : 스택에 추가된 데이터의 크기 리턴

  • show
    : 현재 스택에 포함된 모든 데이터를 String 타입으로 변환하여 리턴

  • clear
    : 현재 스택에 포함된 모든 데이터 삭제

'개발 일지 > CS' 카테고리의 다른 글

[자료구조] 트리(Tree)  (0) 2023.01.17
[자료구조] 큐(Queue)  (0) 2023.01.16
[Data Type] JSON(JavaScript Object Notation)  (0) 2023.01.13
[알고리즘] 재귀(Recursive)  (0) 2023.01.12
[CS] 프로그래밍의 이해  (0) 2022.12.16