자료구조발행일 2023. 5. 26.원본 https://blog.naver.com/jword_/223110628155 ↗

파이썬 큐스택 구현하기 (자료구조의 변환)

파이썬 큐스택 구현하기 (자료구조의 변환) — #파이썬큐 #파이썬스택 #파이썬큐스택 #큐스택구현하기 #자료구조변환 AI스쿨 msa기반 java 백엔드 코스 ...

#자료구조#Naver Blog

#파이썬큐 #파이썬스택 #파이썬큐스택 #큐스택구현하기 #자료구조변환

​

AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니다

자료구조 변환

이전글을 통해 파이썬으로 배열, 링크드리스트, 스택, 큐 등의 자료구조를 구현해보았습니다. 이번에는 구현된 자료구조를 이용하여 다른 자료구조로 변환하는 작업을 해볼까 합니다.

​

예를들어 스택을 구현한다고 가정하면, 배열을 사용하여 스택을 구현하거나 큐로 스택을 구현하는 등의 방법입니다.

​

스택, 큐, 배열, 링크드리스트 순으로 글이 올라올 예정이며, 다른 자료구조로 각각의 자료구조를 어떻게 구현할 수 있는지 정리할겁니다.

큐스택

QueueStack

이미지

마지막으로 Queue를 사용하여 스택을 구현합니다. 큐와 스택의 기능은 이전글을 참고해주세요.

​

QueueStack(큐스택) idea

처음에 큐스택을 구현하는 방법이 떠오르지 않을 수 있습니다. 본격적으로 코드를 들어가기에 앞서 먼저 큐스택을 구현하는 아이디어를 생각해봅시다.

​

이미지

​

2개의 큐를 사용합니다. 첫번째 queue1에만 값을 push합니다.

​

이미지

이미지

​

이후 QueueStack에서 pop()을 실행할 경우 queue1에서 마지막 요소빼고 모두 queue2로 옮겨줍니다. 그러고 queue1에서 마지막 요소를 꺼냅니다. queue2에 옮겨진 값은 다시 queue1으로 넣습니다.

사용할 Queue

이전글을 통해 구현한 큐를 가져왔습니다.

class Queue: def \_\_init\_\_(self): self.data = \[\] def push(self, value): self.data.append(value)​ def pop(self): # 처음 넣은 값 삭제,, first\_value = self.data.pop(0) return first\_value​ def len(self): return len(self.data)

추가로 len()함수를 queue의 기능으로 추가하였습니다. len()함수는 해당 queue 데이터의 크기를 반환합니다. 큐 -> 큐로 데이터를 옮길때 요긴한게 사용될 예정입니다.

​

큐스택 선언하기

QueueStack()

class QueueStack: def \_\_init\_\_(self): self.queue1 = Queue() self.queue2 = Queue()​ def push(self, value): pass​ def pop(self): pass

우선 앞서서 고안한 아이디어대로 queue 두개를 선언합니다. queue1을 push용으로 사용합니다.

큐스택 push

QueueStack.push(value)

class QueueStack: def \_\_init\_\_(self): self.queue1 = Queue() self.queue2 = Queue()​ def push(self, value): self.queue1.push(value)​ def pop(self): pass

QueueStack에 push를 사용할때 queue1에만 값을 넣습니다.

​

큐스택 pop

QueueStack.pop()

class QueueStack: def \_\_init\_\_(self): self.queue1 = Queue() self.queue2 = Queue()​ def push(self, value): self.queue1.push(value)​ def pop(self): for i in range(self.queue1.len() - 1): self.front\_value = self.queue1.pop() self.queue2.push(self.front\_value) self.last\_value = self.queue1.pop()​ for i in range(self.queue2.len()): self.queue1.push(self.queue2.pop) return self.last\_value

QueueStack에 pop()을 사용하면 위에서 제시한 idea대로 구현을 완료하였습니다. queue2에 담은 값은 다시 queue1에 넣어줘야 한다는 점을 잊지 마세요!

​

queue1의 마지막 값은 출력해줍니다.

​

자료구조 총정리

총정리