카테고리 없음

[DataScience Computing] Linear Data Structure 1 - Stack

터틀넥 2024. 4. 18. 23:18

1️⃣ 선형(Linear) 데이터 구조

 

자료를 구성하는 원소들을 하나씩 순차적으로 나열시킨 형태이다.

 

자료들 간의 앞, 뒤 관계가 1:1의 관계로 되어있으며 대표적으로 Array, List, Stack, Que 등이 있다.

 

오늘은 그 중 Stack에 대해 알아보고 간단한 Python 코드를 통해 이를 복습하도록 하자.

 

Ⅰ. Stack

LIFO(Last In, First Out)의 원칙을 자료구조이다. 이 원칙은 가장 마지막에 삽입된 요소가 가장 먼저 제거된다는 것을 의미한다.

 

스택은 일상 생활에서 책을 쌓아 올린 것과 비슷하게 작동한다. 새로운 책을 위에 올려놓고 가져갈 때에도 가장 위에 있는 책을 먼저 가져가는 것과 같은 방식이라고 보면 된다.

 

Ⅰ- 2.  Stack의 주요 작업

  • Push : Stack에 요소를 추가하는 작업이다. 요소는 Stack의 맨 위에 위치한다.
  • Pop : Stack에서 가장 위에 있는 요소를 제거하고 그 값을 반환한다.
  • Top(or Peek) : Stack의 맨 위에 있는 요소를 조회하는 작업으로, 요소를 Stack에서 제거하지 않는다.
  • IsEmpty : Stack이 비어있는지 확인한다.

 

Ⅰ- 3.  Stack의 주요 활용

Stack은 다양한 프로그래밍 상황에서 유용하게 사용된다. 예를 들어, 함수 호출과 관련된 컴퓨터의 내부 프로세스, 괄호의 짝을 맞추는 문제, 페이지 방문 기록을 관리하는 웹 브라우저의 뒤로가기 기능 등에서 Stack이 중요한 역할을 한다.

 

 

Ⅰ- 4.  Python 코드로 알아보는 Stack - Class 정의를 통해

 

class Stack:
    def __init__(self):
        self.items = []  # 스택의 아이템을 저장할 리스트

    def is_empty(self):
        return not self.items  # 리스트가 비어있으면 True 반환

    def push(self, item):
        self.items.append(item)  # 리스트의 끝에 아이템 추가

    def pop(self):
        if self.is_empty():
            return None  # 스택이 비어있으면 None 반환
        return self.items.pop()  # 리스트의 마지막 요소를 제거하고 반환

    def peek(self):
        if self.is_empty():
            return None  # 스택이 비어있으면 None 반환
        return self.items[-1]  # 리스트의 마지막 요소 반환하지만 제거하지는 않음

 

  1. is_empty( )
    • is_empty()는 번역 그대로 스택이 비어 있는지 확인한다. 리스트의 "NOT"연산을 활용하여 비어있으면 "True" 그렇지 않다면 "False"를 반환한다.
  2. push(item)
    • "push" 메서드는 스택의 맨 위에 새로운 요소를 추가한다. 여기서는 리스트의 "append()" 메소드를 사용하여 구현되며, 이는 요소를 리스트의 맨 끝에 추가한다. 
  3. pop( )
    • "pop" 메서드는 스택의 맨 위 요소를 제거하고 그 값을 반환한다. 스택이 비어있는 경우, "is_empty()" 메서드를 통해 확인하고 비어 있다면 "None"을 반환한다. "list.pop()" 함수는 리스트의 마지막 요소를 자동으로 제거하고 반환하므로 LIFO 원칙에 따라 작동한다.
  4. peek( )
    • "peek" 메서드는 스택의 맨 위에 있는 요소를 조회하지만 제거하지는 않는다. 이는 리스트의 마지막 요소 ('self.items[-1]')를 반환함으로써 구현된다. 스택이 비어있다면 "None"을 반환한다.