#!/usr/bin/python3
# ===================================================================
# demonstrate a stack using queue module
#
# From: ww.geekforgeeks.org/stack-in-python/
#
# Note: This class is not thread safe
# ===================================================================
# Quote, "stack n."
# The set of things a person has to do in the future. "I haven't
# done it yet because every time I pop my stack something new
# gets pushed." If you are interrupted several times in the
# middle of a conversation, "My stack overflowed" means
# "I forget what we were talking about."
# -The Hacker's Dictionary
# Friedrich L. Bauer
# German computer scientist who proposed
# "stack method of expression evaluation"
# in 1955
# ===================================================================
from queue import LifoQueue
e = ['a', 'b', 'c', 'd'] # test stack elements
# ---- create LIFO stack
print()
print('create LIFO stack')
stack = LifoQueue(maxsize=0)
# ---- number of elements in the queue
print()
print(f'The stack contains {stack.qsize()} elements')
# ---- push elements onto the stack
print()
for x in e:
print(f'push {x}')
stack.put(x)
# ---- what is the status of the stack now?
print()
print(f'stack empty: {stack.empty()}')
print(f'stack size : {stack.qsize()}')
# ---- pop elements from the stack
print()
while(not stack.empty()):
print(f'pop {stack.get()}')
# ---- what is the status of the stack now?
print()
print(f'stack empty: {stack.empty()}')
print(f'stack size : {stack.qsize()}')
# ---- end demo
print()