Python으로 Queue 구현하기
class Queue:
def __init__(self):
self.items = []
def push(self, value):
self.items.append(value)
def pop(self):
if not self.items:
return None
return self.items.pop(0)
Queue로 Array 구현하기
class QueueArray:
def get(self, idx):
if idx >= self.size:
raise Exception("Out of Index!")
#예외처리로 꼬임 방지
for i in range(idx):
self.queue.push(self.queue.pop())
#for 문으로 해당위치가맨 앞에 오도록
value = self.queue.pop()
self.queue.push(value)
for i in range(self.size-idx-1):
self.queue.push(self.queue.pop())
return value
def set(self, idx, value):
if idx >= self.size:
raise Exception("Out of Index!")
for i in range(idx):
self.queue.push(self.queue.pop())
self.queue.pop()
self.queue.push(value)
for i in range(self.size-idx-1):
self.queue.push(self.queue.pop())
def __init__(self, size):
self.size = size
self.queue = Queue()
for i in range(size):
self.queue.push(None)
Queue Linked list
class QueueList:
def move_next(self):
if self.flag == self.size:
raise Exception("End of List!")
#size와 flag로 예외처리
self.queue.push(self.queue.pop())
self.flag +=1
def get(self):
value = self.queue.pop()
self.queue.push(value)
for i in range(self.size-1):
self.queue.push(self.queue.pop())
return value
# 맨 앞 인덱스를 current로 가정
def add(self, value):
check = self.queue.pop()
if check == None:
self.queue.push(value)
self.flag +=1
self.size +=1
#빈 큐면 새로운 값을 넣고 마무리
return
self.queue.push(check)
self.queue.push(value)
for i in range(self.size):
self.queue.push(self.queue.pop())
# 순서 보정
self.size +=1
self.flag +=1
def delete(self):
self.queue.pop()
self.size -=1
if self.flag == 1:
return
#첫번째 인덱스 다른게 수행
self.flag -=1
for i in range(self.size-1):
self.queue.push(self.queue.pop())
#이외는 하나앞의 인덱스로 연결
def move_front(self):
for i in range(self.size - self.flag + 1):
self.queue.push(self.queue.pop())
self.flag = 1
def __init__(self):
self.queue = Queue()
self.size = 0
self.flag = 0
#size 와 현위치를 채크해서 pop과 push 횟수 결정
Queue로 Stack 구현하기
class QueueStack:
def push(self, value):
self.queue1.push(value)
def pop(self):
count = 0
while True:
value1 = self.queue1.pop()
if value1 == None:
break
self.queue2.push(value1)
count += 1
for i in range(count -1):
self.queue1.push(self.queue2.pop())
value = self.queue2.pop()
return value
def __init__(self):
self.queue1 = Queue()
self.queue2 = Queue()
두개의 큐를 만들어 번갈아가면서 스택의 역할을 하도록 리버스 시킴
'자료구조' 카테고리의 다른 글
Python: Stack 구현하기 (0) | 2024.04.30 |
---|---|
Python: linked list 구현하기 (0) | 2024.04.30 |
Python: Array 구현하기 (1) | 2024.04.30 |
자료구조 (1) | 2024.02.07 |