ใช้ Queue สองอัน จำลองพฤติกรรม Stack (LIFO) โดยย้ายข้อมูลระหว่าง Queue เพื่อให้สมาชิกล่าสุดอยู่หน้าสุด
ตัวอย่างโค้ด
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 ')
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 ใช้ Queue สองอัน: queue_1, queue_2
- push: enqueue เข้า queue_1, ย้ายทุกอย่างจาก queue_2 ไป queue_1, สลับ queue_1 กับ queue_2
- pop: dequeue จาก queue_2 (ซึ่งมีสมาชิกล่าสุดอยู่หน้าสุด)
- โปรแกรมโหมดโต้ตอบ push, pop, quit