100DaysOfCode의 37일차: 기본 데이터 구조, 스택

100일의 코드 37일째입니다. 어제와 같이 예전 운동을 수정하려고 했으나 Power Cut으로 인해 많은 문제가 발생했습니다. 결국 Stack에 대해 배웠습니다. 기술자가 아니라서 처음에는 이해하기 어려웠지만 스택은 비스킷 덩어리와 같으며 조각을 꺼낼 수있는 유일한 방법은 후입선출입니다. 스택에 데이터를 삽입하려면 스택의 현재 포인터 맨 위에 데이터를 추가해야 하며 데이터를 가져오려면 최상위 항목이어야 합니다.

내가 배운 몇 가지 개념


  • 스택은 LIFO(Last In First Out)에서 작동합니다.
  • 스택에 특정 크기가 있습니다.
  • 스택에는 다음과 같은 몇 가지 작업이 있습니다.
  • 푸시: 스택 맨 위에 데이터를 삽입합니다.
  • 팝: 스택 맨 위에서 데이터를 제거합니다.

  • StackOverlow: 스택이 가득 차면 빈 공간이 모두 채워지거나 스택의 데이터 수가 스택 크기와 같으면 푸시 작업이 완료됩니다.
  • StackUnderflow: 스택이 비어 있고 여전히 스택에서 데이터를 팝하려고 할 때.

  • 파이썬 코드




    class Stack:
        def __init__(self, size=5):
            self.size = size
            self.stack = [None] * size
            self.pointer = -1
            print(f"Stack Initialized with size: {size}.")
    
        def push(self, data):
            self.pointer+=1
            if self.pointer >= self.size:
                self.pointer-=1
                print(f"Overflow occured. Hence {data} couldn't be inserted.")
            else:
                self.stack[self.pointer] = data
                print(f"{data} pushed to {self.pointer} position of stack. New Stack is {self.stack}.")
    
        def pop(self):
            if self.pointer < 0:
                self.pointer = -1
                print("Underflow occured. Nothing to pop.")
            else:
                p = self.stack[self.pointer]
                self.stack[self.pointer] = None
                print(f"{p} popped from {self.pointer} position of stack. New Stack is {self.stack}.") 
                self.pointer -= 1
    
    stack = Stack(3)
    stack.push(2)
    stack.push(1)
    stack.push(0)
    stack.pop()
    stack.pop()
    stack.push(5)
    stack.push(6)
    stack.push(3)
    stack.pop()
    stack.pop()
    stack.pop()
    stack.pop()
    stack.push(11)
    


    나는 이 간단한 작업을 수행하는 방법을 알아내기 위해 몇 시간 동안 갇혀 있었고 여전히 약간의 오류가 있을 수 있지만 위 코드의 출력은 명확하고 아래에 나와 있습니다.

    Stack Initialized with size: 3.
    2 pushed to 0 position of stack. New Stack is [2, None, None].
    1 pushed to 1 position of stack. New Stack is [2, 1, None].
    0 pushed to 2 position of stack. New Stack is [2, 1, 0].
    0 popped from 2 position of stack. New Stack is [2, 1, None].
    1 popped from 1 position of stack. New Stack is [2, None, None].
    5 pushed to 1 position of stack. New Stack is [2, 5, None].
    6 pushed to 2 position of stack. New Stack is [2, 5, 6].
    Overflow occured. Hence 3 couldn't be inserted.
    6 popped from 2 position of stack. New Stack is [2, 5, None].
    5 popped from 1 position of stack. New Stack is [2, None, None].
    2 popped from 0 position of stack. New Stack is [None, None, None].
    Underflow occured. Nothing to pop.
    11 pushed to 0 position of stack. New Stack is [11, None, None].
    




    DAY 37 of :* 기본 데이터 구조 학습: 스택* 스택은 후입선출 방식으로 작동pic.twitter.com/njuuh87acZ — Durga Pokharel(@mathdurga)

    좋은 웹페이지 즐겨찾기