算法四:队列(数据结构部分)

 

单端队列的实现:

以顺序表为例实现队列:

如果这个队列,经常的操作是添加数据,应该使用:入队使用append,出队使用pop(0)

如果,经常的操作是取数据,应该使用:入队使用insert(0, item),出队使用pop()

总之,出入队有一个时间复杂为O(1),另一个为O(n)。

class Queue:
    def __init__(self):
        # 这里使用顺序表的列表作为存储的容器
        self.__list = []

    def enqueue(self, item):
        """往队列中添加一个item"""
        self.__list.append(item)

    def dequeue(self):
        """从队列头部删除一个元素"""
        if self.is_empty():
            return
        return self.__list.pop(0)

    def is_empty(self):
        """判断一个队列是否为空"""
        return self.__list == []

    def size(self):
        """返回队列的大小"""
        return len(self.__list)


if __name__ == '__main__':
    q = Queue()
    q.enqueue(1)
    q.enqueue(2)
    q.enqueue(3)
    print(q.dequeue())
    print(q.dequeue())

 

 

双端队列的实现:

当只考虑双端队列的左边或右边时,相当于栈

class Deque:
    """双端队列"""
    def __init__(self):
        # 这里使用顺序表的列表作为存储的容器
        self.__list = []

    def add_front(self, item):
        """往队列中头部添加一个item"""
        self.__list.insert(0, item)

    def add_rear(self, item):
        """往队列中尾部添加一个item"""
        self.__list.append(item)

    def pop_front(self):
        """从队列头部删除一个元素"""
        if self.is_empty():
            return
        return self.__list.pop(0)

    def pop_rear(self):
        """从队列尾部删除一个元素"""
        if self.is_empty():
            return
        return self.__list.pop()

    def is_empty(self):
        """判断一个队列是否为空"""
        return self.__list == []

    def size(self):
        """返回队列的大小"""
        return len(self.__list)

 

 

posted on 2018-01-05 16:25  myworldworld  阅读(71)  评论(0)    收藏  举报

导航