스택(Stack : 쌓다)이란?
프로그래밍에서 목록 혹은 리스트에서 접근이 한 쪽에서만 가능한 구조
LILO(Last-In, Last-Out)
push, peek, pop 세 개의 함수 사용
Book1, 2, 3 을 차례대로 스택에 넣으면
BOOK3 |
BOOK2 |
BOOk1 |
이렇게 쌓여진다. 만약 이 스택에 BOOK4를 추가하면
BOOk4 |
BOOk3 |
BOOk2 |
BOOk1 |
book3 위로 올라간다.
위에서 내려다보면 가장 맨 위에 있는 책(가장 위에있는 데이터) 만 보인다.
가장 위에 있는(가장 마지막에 들어가있는)게 무엇인지 확인하는 함수가 peek
pop은 제일 마지막에 들어간 데이터를 꺼내는 것, 가장 맨 위의 것을 가져가는 것이다.
BOOKS = [BOOK1, BOOK2, BOOK3, BOOK4]
였다가 pop을 하면 [BOOK1, BOOK2, BOOK3] 가 된다.
phthon 스택의 구현방법
1. 직접구현
2. 이미 구현된 클래스 import
3. list를 스택으로 구현
(2,3은 이미 내장되어있는 함수라서 따로 class 구현할 필요가 없다)
1. 직접구현
class Stack(list):
push = list.append
def peek(self):
return self[-1] # 가장 마지막에 있는 데이터. self.[len(self)-1] 사용도 ㄱㅊ
s = Stack()
s.push(1)
s.push(5)
s.push(10)
print("my stack is:", s) # 스택에 1, 5, 10이 순서대로 쌓임
print("popped value is:", s.pop()) # 맨 위 데이터인 10이 뽑힘
print("my stack is:", s) # [1, 5] 만 남음
print("peeked value is:", s.peek()) # 맨 위의 데이터만 보임
print("my stack is:", s) # pop한건 아니기 때문에 데이터는 그대로
3. python list를 스택으로 활용
s =[]
s.append(1)
s.append(5)
s.append(10)
print("my stack is:", s)
print("popped value is:", s.pop())
print("my stack is:", s)
print("peeked value is:", s[-1]) #인덱스로 픽
print("my stack is:", s)
큐(Queue: 일이 처리되기를 기다리는 리스트)
프로그래밍에서 목록 혹은 리스트에서 접근이 양쪽에서 가능한 구조
FIFO(First-In, First-Out)
put / peek / get 함수가 존재
컨베이어 벨트가 있다. 이 벨트 위에 Box1, Box2, Box3을 순서대로 올리면
Box 3 Box2 Box1 |
이렇게 되어있을 것이다.
여기에 box4를 넣으면 put
box의 리스트가 [box1, box2, box3, box4] 가 된다.
peek으로 가장 먼저 들어간 box1 확인
get으로 가장 먼저 들아간 box1을 트럭에 실어!
python 큐 구현
1,2,3 구현 모두 같은 output을 보인다.
1. 직접구현
class Queue(list):
put = list.append
def peek(self):
return self[0] # 가장 앞에 있는 데이터 확인
def get(self):
return self.pop(0) # 인덱스가 0인 데이터 pop
q = Queue()
q.put(1)
q.put(5)
q.put(10)
print("my queue is:", q) # [1, 5, 10]
print("removed value is:", q.get()) # 가장 먼저 들어간 애를 get!
print("my queue is:", q) # [5, 10]
print("peeked value is:", q.peek()) # 가장 나중에 들어간 애 확인만
print("my queue is:", q) # [5, 10]
2. 이미 구현된 클래스 import
from queue import Queue
q = Queue()
q.put(1)
q.put(5)
q.put(10)
print("my queue is:", q) # [1,5,10]
print("removed value is:", q.get()) #get 정의 하지 않아도 내장되어있어서 사용가능
print("my queue is:", q)
print("peeked value is:", q.peek()) #peek도 자동 내장
3. list를 큐로 구현
q = []
q.append(1)
q.append(5)
q.append(10)
print("my queue is:", q)
print("removed value is:", q.pop(0)) #get쓰면 안되나?
print("my queue is:", q)
print("peeked value is:", q[0])
print("my queue is:", q)
'Algorithm' 카테고리의 다른 글
programmers #정수 제곱근 판별 (0) | 2021.07.21 |
---|---|
programmers # 행렬의 덧셈 (0) | 2021.07.20 |
programmers #정수 내림차순으로 배치하기 (0) | 2021.07.20 |
programmers #문자열 다루기 기본 (0) | 2021.07.20 |
programmers #자연수 뒤집어 배열로 만들기 (0) | 2021.07.20 |