본문 바로가기

Computer Science/Data Structure

스택(Stack) 구조의 이해

 

 

Stack의 개념

 

 

Stack은 마치 데이터를 쌓아 뒀다가 산출하는 것 같은 형태의 후입선출 구조를 따르는 선형 자료구조이다.

 

Stack이라는 명칭은 쌓인 더미의 형태를 뜻한다. 카드나 접시 혹은 동전을 쌓아 두었다면 중간 혹은 아래의 것부터 꺼낼 수 없고 위의 것부터 꺼낼 수밖에 없다. Stack은 이와 같은 구조를 가지기 때문에 해당 명칭으로 명명되었다.

 

 

Stack의 데이터 삽입(push)과 삭제(pop) 형태

 

 

Stack 구조에서의 명칭

 

 

데이터를 삽입할 때는 Push, 삭제될 때는 Pop이라고 하며, 선입선출법(FIFO, First In - First Out)의 구조를 가지는 큐(Queue)와는 명칭이 다르다. 위 그림과 같이 Stack의 데이터는 나중에 Push된 순으로만 Pop할 수 있다. 또한 Stack이 가득 찬 상태를 Full, 비어 있는 상태를 Empty라고 한다.

 

 

Stack의 응용

 

 

  • Java에서의 활용 예시
Stack<Integer> stack = new Stack<>();

stack.push(5);
stack.push(4);
stack.push(3);

System.out.println(stack.pop()); // 3
System.out.println(stack); // [5, 4]
System.out.println(stack.peek()); // 4
System.out.println(stack.get(1)); // 4
System.out.println(stack.contains(4)); // true
System.out.println(stack.size()); // 2
System.out.println(stack.isEmpty()); // false
stack.clear();
System.out.println(stack.isEmpty()); // true

 

가장 나중에 투입된 것이 가장 먼저 나가는 후입선출법(LIFO, Last In - First Out)의 구조를 따르고 있으며, 이는 대표적으로 JVM(Java Virtual Machine) stack memory에 응용되었을 뿐만 아니라 회계학에서 재고자산 계산법의 일종이기도 하다. 실제 기업의 업무에 해당하는 재고관리 과정에서도 이용되는 점에서 알 수 있듯이, 소프트웨어를 통해 현실에서 발생하는 문제를 계산하거나 해결하는 일(비즈니스 로직)에 응용될 수 있다.

 

Stack은 이외에도 함수 호출, 재귀, 뒤로 가기 기능 등에 활용될 수 있다.

'Computer Science > Data Structure' 카테고리의 다른 글

Heap 구조의 이해  (0) 2023.06.17
Linked List 구조의 이해  (0) 2023.06.16
Hash Map 구조의 이해  (0) 2023.06.15
배열(Array) 구조의 이해  (0) 2023.06.14
큐(Queue) 구조의 이해  (0) 2023.06.13