天天看点

数据结构 之 '队列'

数据结构——队列初识

队列

一、概念

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。

队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表。

二、队列的特点:先进先出

代码实现

class Queue():
    def __init__(self):
        """
        初始化队列
        """
        self.items = []

    def enqueue(self, item):
        """
        入队
        :param item:
        :return:
        """
        self.items.insert(0, item)

    def dequeue(self):
        """
        出队
        :return:
        """
        return self.items.pop()

    def size(self):
        """
        队列元素个数
        :return:
        """
        return len(self.items)

    def isEmpty(self):
        """
        是否为空队列
        :return:
        """
        return self.items == []


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

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


# 1
# 2
# 3

# 队列这种数据结构的特点:先进先出
           

两个队列实现栈

q1 = Queue()
q2 = Queue()
lst = [1, 2, 3, 4, 5]
for i in lst:
    q1.enqueue(i)

while q1.size() >= 1:
    while q1.size() > 1:
        q2.enqueue(q1.dequeue())
    print(q1.dequeue())
    q1, q2 = q2, q1

# 5
# 4
# 3
# 2
# 1
           

抟扶摇而上者九万里