[자료구조] 스택,큐

권길현·2025년 3월 27일
2

자료구조

목록 보기
1/3

스택 (Stack)

스택(Stack)은 후입선출(LIFO, Last In First Out) 방식으로 동작하는 선형 자료 구조이다.
말그대로 가장 나중에 들어온 것이 가장 먼저 나가는 방식이다
파이썬 Class로 구현한 코드는 아래와 같다.

class Stack:
    arr : list
    t : int
    
    def __init__(self,size):
        self.arr = [0]*size
        self.t = -1
        
    def isFull(self):
        if self.t == (len(self.arr) - 1): return True
        return False
        
    def isEmpty(self):
        return self.t == -1
        
    def pop(self):
        if self.isEmpty():
            return "아무것도 없습니다."
        else:
            p = self.arr[self.t]
            self.t -= 1
            return p
            
    def push(self, a):
        if self.isFull() == False:
            self.t += 1
            self.arr[self.t] = a
        else:
            print("자리가 없습니다.")

위 코드에 구현 되어있는 메서드 종류는 아래와 같다.

메서드 종류

  • push는 값을 집어 넣는 메서드
  • pop은 값을 빼내는 메서드
  • isFull는 꽉 차있는지 알려주는 메서드
  • isEmpty는 비어있는지 알려주는 메서드

스택의 예로는 뒤로가기가 있다.

큐 (Queue)

큐(Queue)은 선입선출(FIFO, First In First Out) 방식으로 동작하는 선형 자료 구조이다.
말그대로 가장 먼저 들어온 것이 가장 먼저 나가는 방식이다
파이썬 Class로 구현한 코드는 아래와 같다.

class Queue:
    arr : list
    f : int
    r : int
    
    def __init__(self,size):
        self.arr = [0]*size
        self.f = -1
        self.r = -1
        
    def isFull(self):
        if self.r == (len(self.arr) - 1): return True
        return False
        
    def isEmpty(self):
        return self.f == self.r
        
    def dequeue(self):
        if self.isEmpty():
            return "아무것도 없습니다."
        else:
            self.f += 1
            p = self.arr[self.f]
            return p
            
    def enqueue(self, a):
        if self.isFull() == False:
            self.r += 1
            self.arr[self.r] = a
        else:
            print("자리가 없습니다.")

메서드 종류

  • enqueue는 값을 집어 넣는 메서드
  • dequeue은 값을 빼내는 메서드
  • isFull는 꽉 차있는지 알려주는 메서드
  • isEmpty는 비어있는지 알려주는 메서드

큐의 예로는 프린터 대기열이 있다.

단점

선형 큐 (Linear Queue)의 단점

  • 배열 기반 큐의 비효율성: 큐에서 요소를 제거하면 앞쪽이 비지만, 배열에서 공간을 그대로 두기 때문에 빈 공간이 쌓임. 이로 인해 실제로 큐가 가득 찼다고 판단해도 물리적으로는 공간이 남아 있을 수 있다.

  • 고정 크기: 큐의 크기가 고정되어 있어서 크기를 조정하기 어려움. 큐가 가득 차면 더 이상 요소를 삽입할 수 없음.

선형 스택 (Linear Stack)의 단점

  • 고정 크기: 스택의 크기도 고정되어 있어서 스택이 가득 차면 더 이상 삽입할 수 없음. 크기 조정이 불편함.

  • 오버플로우 및 언더플로우: 스택이 가득 차거나 비어있을 때, 오버플로우(삽입 불가)나 언더플로우(제거 불가) 문제가 발생할 수 있음.

  • 단방향 삽입/삭제: 후입선출(LIFO) 방식만 지원하므로 다른 방식으로 데이터를 접근하기 어려움. 중간에 접근하려면 전체 스택을 조회해야 함.

큐와 스택을 시각화 하면 다음과 같다.

마치며...

공부 열심히 해야 할 것 같습니다. ㅠㅠ

달을 향해 쏴라, 빗나가도 별이 될테니.
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ-Les Brown-

profile
하고 싶은거 하면서 삽시다.

1개의 댓글

comment-user-thumbnail
2025년 4월 1일

멋지다.

답글 달기