class TwoStackQueue:
def __init__(self):
self.head_stack = []
self.tail_stack = []
def appendTail(self, val):
self.tail_stack.append(val)
def deleteHead(self):
if self.head_stack:
return self.head_stack.pop()
while self.tail_stack:
self.head_stack.append(self.tail_stack.pop())
if self.head_stack:
return self.head_stack.pop()
return None
from collections import deque
class TwoQueueStack:
def __init__(self):
self.q1 = deque()
self.q2 = deque()
self.q = self.q1
self.qlen = 0
self.s = self.q2
def push(self, val):
self.q.append(val)
self.qlen += 1
def pop(self):
n = self.qlen
if n <= 0:
return None
while n > 1:
self.s.append(self.q.popleft())
n-=1
data = self.q.popleft()
self.q = self.s
self.s = self.q
self.qlen-=1
return data
if __name__ == "__main__":
q = TwoStackQueue()
for i in range(10):
q.appendTail(i)
for j in range(5):
print(q.deleteHead())
for i in range(5):
q.appendTail(i)
for j in range(15):
print(q.deleteHead())
print('stack')
s = TwoQueueStack()
for i in range(10):
s.push(i)
for i in range(5):
print(s.pop())
for i in range(10, 20):
s.push(i)
for i in range(15):
print(s.pop())