[Data Structure] - 2. Stack & Queue

문성호·2020년 9월 10일
0

Stack

  • 자료구조 중의 한 종류인 Stack.
  • Stack이란 영어로 '쌓아 올린 더미'를 얘기한다.

LIFO(Last-In-First-Out)

  • 상자에 책을 넣을 때 아래에서부터 1,2,3,4,5를 쌓으면 꺼낼 때는 5,4,3,2,1 순으로 꺼낸다.
    마지막에 쌓은 책이 꺼낼 때는 제일 먼저 꺼내게 되는 것처럼, Stack도 같은 원리다.
  • 위 그림처럼 아래에서부터 1,2,3,4,5 순으로 데이터를 넣으면, 꺼낼 때는 5,4,3,2,1 순으로
    꺼내는 Last-In-First-Out 방식의 자료구조가 Stack이다.

주로 많이 쓰이는 곳은

1. 함수 실행 콜 스택

  • 어떤 언어든 주요 Procedure를 담당하는 Main함수가 있고, 그 위에 여러 function들을 구동한다. 이 때 함수를 실행 순서에 따라 메모리에서 불러와서 로딩시키는 Call Stack이 바로 Stack이다.

  • 위 사진의 코드처럼 doJob()이라는 함수를 수행하면 printLog함수를 실행하고 그 안에서 console.log()함수를 실행한 후 다시 printLog함수를 닫고 doJob함수로 돌아가서 다음 실행을 한 다음 main으로 돌아가는 일련의 과정 속에서 함수들의 실행 순서는 Stack에 Push된 다음 Pop된다.

2. directory 경로

  • 윈도우든 리눅스든, 디렉토리 안에 파일이 있고 또 디렉토리가 있는 구조를 이룬다.
  • 내 컴퓨터에서 C:/Windows/System... 이런 식으로 폴더 안에 디렉토리.. 이런 식으로 경로
    들이 쌓여서 표시되는 것도 Stack의 예시라고 볼 수 있다.

Class로 제작한 Stack

class Stack:
    def __init__(self):
        self.state = []

    def push(self, data):
        self.state.append(data) # 데이터를 스택에 push 하는 것을 구현

    def pop(self):
        popData = self.state[-1]
        del self.state[-1]
        return popData		# 데이터를 스택에서 pop 해서 그 값을 리턴

    def getPeak(self):
        return self.state[-1]	# 스택의 최상위 값을 리턴하도록 구현.

Queue

  • 자료구조 중의 한 종류인 Queue.
  • 줄, 대기행렬이라는 뜻을 가진 Queue는 실제로 First-In-First-Out 방식의 자료구조다.

FIFO(First-In-First-Out)

  • 톨게이트를 생각하면 매우 쉽게 이해할 수 있다.
    먼저 도착한 차가 먼저 나간다. First-In-First-Out.

주로 많이 쓰이는 곳은

1. 프린터 작업 스케줄러

2. JavaScript 비동기 처리 (ex. DOM Event, setTimeout, HTTP 통신을 하는 fetch 함수 등..)

Class로 제작한 Queue

class Queue:
    def __init__(self):
        self.state = []

    def enqueue(self, person):
        self.state.append(person)
        print("Result : ", self.state)
    	# 데이터를 큐에 enqueue 하는 것을 구현

    def dequeue(self):
        deqData = self.state[0]
        del self.state[0]
        print("Result : ", self.state)
        return deqData  
        # 데이터를 큐에서 dequeue 해서 그 값을 리턴하도록 구현

    def getFirst(self):
        print("Result : ", self.state, "First : ", self.state[0])
        return self.state[0]
	# 큐의 가장 먼저 들어온 값을 리턴하도록 구현 해 주세요
profile
오늘을 모아 내일을

0개의 댓글