자료 구조 | 스택(stack) & 큐(queue)

gemma. K·2021년 1월 31일
0

스택 (stack)


후입선출(Last In First Out, LIFO)인 스택은 언제나 목록의 끝인 한 쪽에서만 자료를 넣거나 뺄 수 있다. 상자처럼 물건은 맨 밑부터 차곡 차곡 쌓아가는 형태를 떠올리면 이해가 쉽다. 그래서 맨 처음 넣은 자료는 맨 마지막에 뺄 수 있으며 가장 마지막에 넣은 데이터는 가장 위에 위치 하기 때문에 가장 먼저 빼서 사용할 수 있다.
스택에서는 데이터를 넣는 것은 push라 하며 데이터를 읽는 것과 동시에 삭제하는 것은 pop이라 한다. 일상 생활에서 우리가 흔히 볼 수 있는 스택 자료 구조는 인터넷 서핑을 할 때 뒤로가기를 하는 것이다. 뒤로가기를 하게 되면 가장 최근의 페이지를 보여 준다.

파이썬으로 stack 구현하기

class Stack:
    def __init__(self):
        self.stack = list()
        self.size = len(self.stack)
        self.max = 3
    
    def push(self, data):
    	if self.size >= self.max:
            return "You are not able to push data more"
        self.stack.append(data)
        return "Data pushed"
 
    def pop(self):
        if not self.stack:
            return "No Data"
        data = self.stack.pop()
        return f"Data {data} popped"
    
    def getStack(self):
        if not self.stack:
            return "Stack is Empty"
        return self.stack
    
    def size(self):
    	size = self.size
        return f'스택 길이: {size}'
        
    def is_empty(self):
        if not self.stack:
            return "There is no data"
        self.stack = list()
        return "Stack is empty now"

큐 (queue)


제일 먼저 넣은 데이터가 가장 먼저 나오는 선입선출(First In First Out, FIFO)의 자료 구조이다. 큐(Queue)라는 뜻은 줄(Line)이라는 뜻으로 실제로 무언가를 사기 위해 기다릴 때 먼저 기다리는 사람이 제일 앞에 서 있고, 나중에 온 사람들은 그 뒤에 차례 차례로 뒤에 서게 된다. 이처럼 큐는 데이터들이 줄처럼 나열되어 있는 형태를 떠올리면 이해하기 쉽다.

파이썬으로 queue 구현하기

class Queue:
    def __init__(self):
        self.queue = list()
        self.size = len(self.queue)
        
    def enqueue(self, data):
        self.queue.append(data)
   
    def dequeue(self):
        if self.size == 0:
            return "There is no Data."
        return del self.queue[0]
        
    def getQueue(self):
        return self.queue
    
    def is_empty(self):
        if self.size == 0:
            return "There is no data removed."
        self.queue = list()
        return "Queue is empty now."

0개의 댓글