1 분 소요

1. 스택의 구조

  • 스택은 LIFO(Last In, Fisrt Out) 또는 FILO(First In, Last Out) 데이터 관리 방식을 따름
    - LIFO: 마지막에 넣은 데이터를 가장 먼저 추출하는 데이터 관리 정책
    - FILO: 처음에 넣은 데이터를 가장 마지막에 추출하는 데이터 관리 정책
  • 대표적인 스택의 활용
    - 컴퓨터 내부의 프로세스 구조의 함수 동작 방식
  • push 시, head에 새로운 데이터가 붙는다.
  • pop 시, head에서 데이터가 나온다.

2. 스택 구조와 프로세스 스택

  • 스택 구조는 프로세스 실행 구조의 가장 기본
    - 함수 호출시 프로세스 실행 구조를 스택과 비교해서 이해 필요

스크린샷 2022-09-07 오후 1 36 39
왜 위 사진과 같은 출력 결과가 나올까?
스크린샷 2022-09-07 오후 1 33 07

🌟 프로세스 동장 방식에 스택이라는 자료구조를 사용하기 때문에,
recursive(4)를 호출했을 때, recursive(4)가 스택에 담기고,
recursive(4) 안에서 print(4)를 하고 recursive(3)을 호출하기 때문에 recursive(3)이 스택에 담긴다.

마찬가지로 print(3)을 하고 recursive(2)가 스택에 담기고,
print(2)을 하고 recursive(1)가 스택에 담기고,
print(1)을 하고 recursive(0)가 스택에 담기고,
print(0)을 하고 recursive(-1)가 스택에 담긴다.
이제 x가 -1이기 때문에 (0보다 작음) 더이상 recursive()를 호출하지 않고 print("ended")가 실행된다.

그 후에는 스택의 head가 가리키는 recursive(-1)부터 print("returned", 0)을 하고,
순서대로 print("returned", 1), print("returned", 2), print("returned", 3), print("returned", 4) 까지 진행된다.

3. 자료 구조 스택의 장단점

  • 장점
    - 구조가 단순해서, 구현이 쉽다.
    - 데이터 저장/읽기 속도가 빠르다.
  • 단점 (일반적인 스택 구현시)
    - 데이터 최대 갯수를 미리 정해야 한다. (파이썬의 경우 재귀 함수는 1000번까지만 호출이 가능함)
    - 저장 공간의 낭비가 발생할 수 있음 (미리 최대 갯수만큼 저장 공간을 확보해야 함)

스택은 단순하고 빠른 성능을 위해 사용되므로, 보통 배열 구조를 활용해서 구현하는 것이 일반적임. 이 경우, 위에서 열거한 단점이 있을 수 있음

4. 파이썬 리스트 기능에서 제공하는 메서드로 스택 사용해보기

스크린샷 2022-09-07 오후 1 54 20

5. 프로그래밍 연습

리스트 변수로 스택을 다루는 pop, push 기능 구현해보기 (pop, push 함수 사용하지 않고 직접 구현해보기)

스크린샷 2022-09-07 오후 2 01 39



💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기