数据结构及算法(Python)---队列

  队列
  1、特点是先进先出(采用单链表存储方式)
  2、操作
    enqueue(data) 往队列中添加一个data数据
    dequeue() 从队列头部删除一个数据
    is_empty() 判断一个队列是否为空
    size() 返回队列的大小
""" 采用列表方式存储 """

class Queue(object):
    def __init__(self):
        self.__list = []    # 创建一个空列表

    def enqueue(self, data):
        """往队列中添加一个数据"""
        self.__list.append(data)  # 列表的尾部进行数据添加

    def dequeue(self):
        """从队列头部删除一个数据"""
        return self.__list.pop(0)     # 列表的头部进行数据删除
    """ 也可以从列表头部进行数据添加,列表尾部进行数据删除 添加:self.__list.insert(0, data) 删除:self.__list.pop() """
    def is_empty(self):
        """判断一个队列是否为空"""
        return not self.__list  # 列表为空时返回True,否则返回False

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

if __name__ == '__main__':
    q = Queue()
    q.enqueue("aaa")
    q.enqueue("bbb")
    q.enqueue("ccc")

    print(q.size())

    print(q.dequeue())
    print(q.dequeue())
    print(q.dequeue())

    print(q.size())

执行结果

3
aaa
bbb
ccc
0
""" 采用单链表存储方式 """

import SingleLinkList

class Queue(object):
    def __init__(self):
        self.__sll = SingleLinkList()  # 定义一个链表用于存放数据

    def enqueue(self, data):
        """往队列中添加一个数据"""
        self.__sll.append(data)     # 链表的尾部进行数据添加

    def dequeue(self):
        """从队列头部删除一个数据"""
        data = self.__sll.index(0)   # 先获取收节点的数据
        if data:
            self.__sll.remove(data)  # 如果链表非空,则删除首节点
        return data     # 如果链表非空则返回的是首节点的数据,否则返回时None

    def is_empty(self):
        """判断一个队列是否为空"""
        return not self.__sll.is_empty()  # False 不为空, True 空

    def size(self):
        """返回队列的大小"""
        return self.__sll.length()    # 直接返回链表的长度

if __name__ == '__main__':
    q = Queue()
    q.enqueue("aaa")
    q.enqueue("bbb")
    q.enqueue("ccc")

    print(q.size())

    print(q.dequeue())
    print(q.dequeue())
    print(q.dequeue())

    print(q.size())

执行结果

3
aaa
bbb
ccc
0
点赞