数据结构及算法(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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值