스택, 큐, 딕셔너리

queues

현실에서 큐 하면 가장 먼저 생각나는 예시는 식당앞에서는 줄서기와 같은 예이다. 식당에서 먼저 주문한사람이 음식을 받는 구조이다. 컴퓨터 공학에서의 큐도 기술적인 정의를 가지고 있다. FIFO(First-in, First-out), 즉 선입 선출의 특징을 가진 자료 구조이다. 큐에는 두 가지 기본 연산이 있다. enqueue 와 deaueue 이다. enqueue 는 줄에 들어가서 서는 것이고, dequeue 는 줄을 빠져나오는 것이다. 배열과 연결 리스트를 생각해보면 이 구조를 큐의 개념을 구현하기 위한 블록으로 생각할 수 있다. 동적으로 크기가 바뀌는 배열이나 연결 리스트를 이용하여 상황을 구현할 수 있다.

큐의 구현방법

직접 구현

class queue(list):
    put = list.append
    
    def peek(self):
        return self[0]
    
    def get(self):
        return self.pop(0)
  • 큐 직접 구현 활용
q = queue()
q.put(1)
q.put(5)
q.put(10)
print(q)
[1, 5, 10]
  • get 으로 처음 요소 out
q.get()
1
print(q)
[5, 10]
  • peek 활용
q.peek()
5
print(q)
[5, 10]

구현된 클래스 import

from queue import Queue
q = queue()q.put(1)q.put(5)q.put(10)print(q)
[1, 5, 10]
  • get 함수 사용
q.get()
1
print(q)
[5, 10]
  • peek 함수 사용
q.peek()
5
print(q)
[5, 10]

list 를 큐로 활용

q = []q.append(1)q.append(5)q.append(10)print(q)
[1, 5, 10]
  • 제거할땐 pop함수 활용
q.pop(0)
1
print(q)
[5, 10]
  • peek 은 index 이용
q[0]
5
print(q)
[5, 10]

stacks

위의 큐와는 반대의 자료 구조이다. 이런 구조를 스택이라고 부른다. 현실에서의 스택도 식당에서 찾아볼 수 있다. 직원이 쟁반을 쌓아두면 가장 아래에있는 쟁반을 가져가는 것이 아닌, 가장 마지막에 올려둔 제일 위쪽의 쟁반부터 사용한다. LIFO(Last-in, First-out) 후입선출 방식이다. push pop 이라고 부른다. 스택에 어떤 요소를 밀어넣는 push 와 가장 위쪽의 요소를 뺀다는 의미로 pop을 사용한다.

스택의 구현방법

직접 구현

  • push 구현
class stack(list):    push = list.append
  • peek 구현
def peek(self):    return self[-1]

스택 구현 활용

s = stack()s.push(1)s.push(5)s.push(10)print(s)
[1, 5, 10]
s.pop()
10
print(s)
[1, 5]
peek(s)
5
  • 스택을 List 를 이용하여 활용
s = []s.append(1)s.append(5)s.append(10)print(s)
[1, 5, 10]
s.pop()
10
print(s)
[1, 5]
  • peek
s[-1]
5
print(s)
[1, 5]

dictionary

컴퓨터 공학에서는 키(key)와 값(value)의 쌍으로 이루어져 있는 자료구조이다. 키에 해당하는 값을 저장하고 읽어오는 것이다.