Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

두 개의 대기열을 사용하여 스택을 구현하는 Python 프로그램

<시간/>

두 개의 큐를 사용하여 스택을 구현해야 하는 경우 Queue_structure 클래스와 함께 'Stack_structure' 클래스가 필요합니다. 스택과 큐에서 각각 값을 추가 및 삭제하기 위해 이러한 클래스에 각각의 메서드가 정의되어 있습니다.

아래는 동일한 데모입니다 -

예시

class Stack_structure:
   def __init__(self):
      self.queue_1 = Queue_structure()
      self.queue_2 = Queue_structure()

   def check_empty(self):
      return self.queue_2.check_empty()

   def push_val(self, data):
      self.queue_1.enqueue_operation(data)
      while not self.queue_2.check_empty():
         x = self.queue_2.dequeue_operation()
         self.queue_1.enqueue_operation(x)
      self.queue_1, self.queue_2 = self.queue_2, self.queue_1

   def pop_val(self):
      return self.queue_2.dequeue_operation()

class Queue_structure:
   def __init__(self):
      self.items = []
      self.size = 0

   def check_empty(self):
      return self.items == []

   def enqueue_operation(self, data):
      self.size += 1
      self.items.append(data)

   def dequeue_operation(self):
      self.size -= 1
      return self.items.pop(0)

   def size_calculate(self):
      return self.size

my_instance = Stack_structure()

print('Menu')
print('push <value>')
print('pop')
print('quit')

while True:
   my_input = input('What operation would you like to perform ? ').split()

   operation = my_input[0].strip().lower()
   if operation == 'push':
      my_instance.push_val(int(my_input[1]))
   elif operation == 'pop':
      if my_instance.check_empty():
         print('Stack is empty.')
      else:
         print('The deleted value is: ', my_instance.pop_val())
   elif operation == 'quit':
      break

출력

Menu
push <value>
pop
quit
What operation would you like to perform ? push 56
What operation would you like to perform ? push 34
What operation would you like to perform ? push 78
What operation would you like to perform ? push 90
What operation would you like to perform ? pop
The deleted value is: 90
What operation would you like to perform ? quit

설명

  • 빈 목록을 초기화하는 'Stack_structure' 클래스가 생성됩니다.

  • 스택이 비어 있는지 확인하기 위해 'check_empty' 메서드가 정의되어 있습니다.

  • 스택에 요소를 추가하는 'push_val'이라는 또 다른 메서드가 정의되어 있습니다.

  • 스택에서 요소를 삭제하는 'pop_val'이라는 또 다른 메서드가 정의되어 있습니다.

  • 빈 목록을 초기화하고 목록의 크기를 0으로 지정하는 'Queue_structure' 클래스가 생성됩니다.

  • 대기열이 비어 있는지 확인하기 위해 'check_empty' 메서드가 정의되어 있습니다.

  • 큐에 요소를 추가하는 'enqueue_operation'이라는 또 다른 메서드가 정의되어 있습니다.

  • 큐에서 요소를 삭제하는 'dequeue_operation'이라는 또 다른 메서드가 정의되어 있습니다.

  • 큐의 크기를 결정하는 'size_calculate'라는 또 다른 메서드가 정의되어 있습니다.

  • 이 'Queue_structure'의 두 인스턴스가 정의됩니다.

  • 메뉴, 푸시, 팝업 및 종료의 네 가지 옵션이 제공됩니다.

  • 사용자가 제공한 입력에 따라 스택의 요소에 대해 작업이 수행됩니다.

  • 출력은 콘솔에 표시됩니다.