Queue1 -using two stacks impliment

# -*-coding: utf-8 -*-
# Author :writen by Qiusheng Li
# Time: 2014/08/18
# Email:liqiusheng_123@hotmail.com
# enqueue Insert an item at the back of the queue
# dequeue Remove an item from the front of the queue
# peek/front Retrieve an item at front of the queue without removing it
# empty/size Check whether the queue is empty or return its size
# using list impliment the Queue

#node we have learned that the method of insert for lists in python
#is very inefficient ,because when we append or pop at /from their
#end is only work on O(1),insert will shift all the other element.

class Queue(object):
    '''using two stacks impliemnt queue'''
    def __init__(self):
        self.initems = []
        self.outitems = []
        
    def enqueue(self,value):
        self.initems.append(value)
        
    def dequeue(self):
        if self.outitems != []: #not null   good job is if self.outitems:
            return self.outitems.pop()
        while self.initems:    # this is same upside
            self.outitems.append(self.initems.pop())
        if self.outitems:
             return self.outitems.pop()
        else:
             raise Exception('Queue is empty')
            
    def peek(self):
        if self.outitems: #not null good job is if self.outitems:
            return self.outitems[-1]
        while self.initems:    # this is same upside
            self.outitems.append(self.initems.pop())
        if self.outitems:
             return self.outitems[-1]
        else:
             raise Exception('Queue is empty')
            
    def isEmpty(self):
        return not (self.outitems and self.initems)
    def size(self):
        return len(self.initems) + len(self.outitems)

def Queue1Main():
    queue = Queue()
    queue.enqueue(1)
    queue.enqueue(2)
    queue.enqueue(3)
    print "size :   ",queue.size()
    print "peek:    ",queue.peek()
    print "dequeue: ",queue.dequeue()
    queue.enqueue(4)
    print "size :   ",queue.size()
    print "peek:    ",queue.peek()
    print "dequeue: ",queue.dequeue()
    print "dequeue: ",queue.dequeue()
    print "dequeue: ",queue.dequeue()
    print "dequeue: ",queue.dequeue()
'''testing result
size :    3
peek:     1
dequeue:  1
size :    3
peek:     2
dequeue:  2
dequeue:  3
dequeue:  4
dequeue: 

Traceback (most recent call last):
  File "F:/201408/project/technoloybook/algorithms/codes/Queue1.py", line 66, in <module>
    Queue1Main()
  File "F:/201408/project/technoloybook/algorithms/codes/Queue1.py", line 63, in Queue1Main
    print "dequeue: ",queue.dequeue()
  File "F:/201408/project/technoloybook/algorithms/codes/Queue1.py", line 32, in dequeue
    raise Exception('Queue is empty')
Exception: Queue is empty
'''
if __name__ == '__main__':
    Queue1Main()
    
        
        



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值