队列的python实现

队列(queue),是一种操作受限的线性表。只允许在队列的一端添加元素,在队列的另一端删除元素。能添加元素的一端称为队尾,能删除元素的一端称为队头。

队列最大的特性是:先进先出(FIFO,first in first out)

 

下面为普通队列的python实现:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = "hsz"


class Queue(object):
    """队列"""
    def __init__(self, maxsize=0):
        """maxsize<=0代表队列不限定大小"""
        self.queue = []
        self.maxsize = maxsize

    def is_empty(self):
        return len(self.queue) == 0

    def is_full(self):
        if self.maxsize <= 0:
            return False
        else:
            return len(self.queue) == self.maxsize

    def enqueue(self, item):
        """入队"""
        if self.is_full():
            raise Exception("Queue is full!")
        else:
            self.queue.append(item)

    def dequeue(self):
        """出队"""
        if self.is_empty():
            raise IndexError("Queue is empty!")
        else:
            return self.queue.pop(0)

    def size(self):
        return len(self.queue)

    def get_front(self):
        """
        返回队头元素
        :return:
        """
        if self.is_empty():
            raise IndexError("Queue is empty!")
        else:
            return self.queue[0]

    def get_rear(self):
        """
        返回队尾元素
        :return:
        """
        if self.is_empty():
            raise IndexError("Queue is empty!")
        else:
            return self.queue[-1]

    def print_queue(self):
        return self.queue


if __name__ == "__main__":
    # 实例化对象队列
    queue = Queue()
    # 入队四个数
    queue.enqueue(1)
    queue.enqueue(2)
    queue.enqueue(3)
    queue.enqueue(4)
    print(queue.queue)       # [1, 2, 3, 4]
    print(queue.is_empty())  # False   队列不为空
    print(queue.is_full())   # False   队列没有到最大元素
    # 出队  先入先出  出的是1 所有剩 [2,3,4]
    queue.dequeue()
    print(queue.queue)
    # 返回队列的元素个数 3
    print(queue.size())
    # 获取队列的头数据  2
    print(queue.get_front())
    # 获取队列的尾数据  4
    print(queue.get_rear())
    # 打印队列所有数据 [2,3,4]
    print(queue.print_queue())

打印结果为:

[1, 2, 3, 4]
False
False
[2, 3, 4]
3
2
4
[2, 3, 4]

其他类型待续。。。

posted @ 2019-10-04 20:15  pycoder_hsz  阅读(304)  评论(0编辑  收藏  举报