[자료구조] 스택과 큐
목표 : 스택 , 큐 개념과 기본 구현 코드에 대해 알아보자.
✏️스택
스택의 데이터 구조
LIFO(Last In First Out) 원칙 : 스택 내부에 마지막에 들어간 요소가 먼저 제거됨.
push : 스택 맨 위에 항목을 올리는 것
pop : 스택의 맨 위에서 항목을 제거하는 것
IsEmpty : 스택이 비어있는지 확인
IsFull : 스택이 가득 찼는지 확인
Peek : 최상위 요소를 제거하지 않고 값을 가져옴Top = -1 : 비어있는지 확인하기 위한 비교값
구현 코드
# 스택 생성
def create_stack():
stack = []
return stack
# 빈 스택
def check_empty(stack):
return len(stack) == 0
# 스택에 항목 추가
def push(stack, item):
stack.append(item)
print("pushed item :" + item)
#스택에서 항목 제거
def pop(stack):
if(check_empty(stack)):
return "empty"
return stack.pop()
stack = create_stack()
push(stack, str(1))
push(stack, str(2))
push(stack, str(3))
push(stack, str(4))
print("poped item:" + pop(stack))
언제 사용할까?
브라우저에서 뒤로 가기 할 때 pop
문자 거꾸로 바꾸고 싶을 때
✏️큐
큐의 대기열 데이터 구조
FIFO(First In First Out) 원칙 : 먼저 들어간 항목이 먼저 나오게 됨.
Enqueue : 큐의 끝 요소에 추가
Dequeue : 큐의 맨 앞 요소를 제거
IsEmpty : 대기열이 비어있는지 확인
IsFull : 대기열이 가득 찼는지 확인
Peek : 큐의 앞부분을 제거하지 않고 값 가져옴-1 : '비어 있다' 의미
값이 추가 될 수록 뒤를 의미하는 REAR가 점점 커짐
값이 빠질 수록 앞을 의미하는 FRONT가 점점 커짐
# 큐 생성
class Queue :
def __init__(self):
self.queue = []
# 큐에 항목 넣기
def enqueue(self, item):
self.queue.append(item)
# 큐에 항목 제거
def dequeue(self):
if len(self.queue) < 1:
return None
return self.queue.pop(0)
# 현재 큐 보여주기
def display(self):
print(self.queue)
def size(self):
return len(self.queue)
q = Queue()
q.enqueue(1)
q.enqueue(2)
q.enqueue(3)
q.enqueue(4)
q.display()
q.dequeue()
print("After removing an element")
q.display()
언제 사용할까?
콜센터 전화 시스템은 전화를 건 사람들을 순서대로 유지
CPU 스케줄링
실시간 시스템 인터럽트 처리