(Python3)数据结构——02.队列的原理及实现

前言

  • 有Python基础
  • 学过数据结构那就更妙了

原理

先进先出

  • 注意:栈是先进后出

灵感来源于生活,也许这个“队列”就是根据生活中的排队的队列所命名的。因为它们的特点是共通的,都是先来排队的先出去,即先进先出。因此在想到数据结构中的队列时候,将其与生活中的排队联系起来即可。图片来源于百度百科,链接:

 https://baike.baidu.com/item/%E9%98%9F%E5%88%97/14580481?fr=aladdin

在这里插入图片描述

  1. 初始化时,队列为空

  2. 添加元素时,添加的第一个元素作为队头,之后加入的元素需要排在他的后面(类似于现实生活中的排队)

  3. 出队时,排在开头的人先出,之后再轮到后面的元素

  4. 不同于栈,栈是只对栈顶元素操作,队列则是对队头队尾的元素操作。

实现

环境

win10 + pycharm + python3.7。Python3是重点,其他的可换。

初始化

队列的初始化,按上面的话讲,应是空的队列,初始化类似栈,同样的是采用list类型作为items

class Queue(object):
    def __init__(self):
        self.items = []

判空/遍历/size

判空、遍历、size方法依旧采用之前博客中的方法,链接

https://blog.csdn.net/sf9898/article/details/104939489

代码

    def isEmpty(self):
        return len(self.items) == 0
    def size(self):
        return len(self.items)
    def travel(self):
        for i in self.items:
            print(i, end= ' ')
        print('')

增加元素和删除元素

  • 队列的重要部分,和栈区别的部分,即添加和删除操作,入队的时候肯定是从队尾排起,因此直接将加进来的元素加到队尾即可,现在用list类型的items模拟队列,将items的第一个元素作为队头,最后一个元素作为队尾,那么在做将元素加到队尾的这一步操作时,直接用append即可。
  • 出队的时候,是从队头开始走人的。那么用pop(0)即可。
# 队列是先进先出
    # 入队
    def push(self, item):
        self.items.append(item)

    # 出队
    def pop(self):
        self.items.pop(0)

完整代码

class Queue(object):
    def __init__(self):
        self.items = []

    def isEmpty(self):
        return len(self.items) == 0

    # 队列是先进先出
    # 入队
    def push(self, item):
        self.items.append(item)

    # 出队
    def pop(self):
        self.items.pop(0)

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

    def travel(self):
        for i in self.items:
            print(i, end=' ')
        print('')


q = Queue()
print(q.isEmpty())
for i in range(5):
    q.push(i)
q.travel()      # 打印出0-5
print("size:", q.size())
q.pop()
q.pop()     # 进行2次出队的操作,讲道理是前两个元素即0和1出去了,现在遍历应该是只有后三个元素即2 3 4
print("size:", q.size())
q.travel()
  • 结果

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章