使用两个队列实现堆栈的 Python 程序
当需要使用两个队列实现堆栈时,需要一个“Stack_structure”类和一个Queue_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): returnself.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输出结果') 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 pushpop 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”的方法被定义为从堆栈中删除元素。
创建了一个“Queue_structure”类,它初始化一个空列表并将列表的大小分配为0。
定义了“check_empty”方法来查看队列是否为空。
另一个名为“enqueue_operation”的方法被定义为将元素添加到队列中。
另一个名为“dequeue_operation”的方法被定义为从队列中删除元素。
定义了另一个名为“size_calculate”的方法,用于确定队列的大小。
定义了此“Queue_structure”的两个实例。
给出了四个选项-菜单、推送、弹出和退出。
根据用户给定的inut,对栈的元素进行操作。
输出显示在控制台上。