diff options
Diffstat (limited to 'front_middle_back_queue.py')
-rw-r--r-- | front_middle_back_queue.py | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/front_middle_back_queue.py b/front_middle_back_queue.py new file mode 100644 index 0000000..cc3e619 --- /dev/null +++ b/front_middle_back_queue.py @@ -0,0 +1,64 @@ +# 1670. Design Front Middle Back Queue + +""" +design a queue that supports 'push' and 'pop' operations in the front, +middle, and back. notice that when there are two middle position choices, the +operation is performed on the frontmost middle position choice. +""" + + +class FrontMiddleBackQueue(object): + def __init__(self): + self.a = [] + + def pushFront(self, val): + """ + :type val: int + :rtype: None + """ + self.a.insert(0, val) + + def pushMiddle(self, val): + """ + :type val: int + :rtype: None + """ + self.a.insert(len(self.a) / 2, val) + + def pushBack(self, val): + """ + :type val: int + :rtype: None + """ + self.a.append(val) + + def popFront(self): + """ + :rtype: int + """ + return self.a or [-1].pop(0) + + def popMiddle(self): + """ + :rtype: int + """ + return self.a or [-1].pop((len(self.a) - 1) / 2) + + def popBack(self): + """ + :rtype: int + """ + return self.a or [-1].pop() + + +if __name__ == "__main__": + obj = FrontMiddleBackQueue() + obj.pushFront(1) + obj.pushBack(2) + obj.pushMiddle(3) + obj.pushMiddle(4) + print(obj.popFront()) + print(obj.popMiddle()) + print(obj.popMiddle()) + print(obj.popBack()) + print(obj.popFront()) |