队列是一种抽象数据结构,具有以下特点:

(1)具有先进先出的特性(FIFO)

(2)拥有两种基本操作,即加入和删除,而且使用front和rear两个指针来分别指向队列的前端和末尾。

队列的基本操作

create   创建空队列

add       将新数据加入队列的末尾,返回新队列

delete   删除队列前端的数据,返回新队列

front     返回队列前端的值

empty  若队列为空,则返回 ‘真’,否则返回 ‘假’

实现queue有两种方式可以用数组和链表

1.我们先用数组实现队列,数组实现队列的好处在于算法相当简单,但是也有缺点,数组无法根据队列的实际需要动态申请,

只能声明固定的大小。现在我们声明一个有限容量的数组

MAXSIZE=4            #定义队列的大小
queue=[0]*MAXSIZE
front=-1
rear=-1

(1)开始时,我们将front与rear都设置-1,当front = rear时,为空队列

事件说明 front rear Q(0) Q(1) Q(2) Q(3)
空队列 -1 -1        

(2)当加入dataA , front=-1,rear=0,没加入一个元素,将rear值加1:

加入dataA -1      0       dataA                             

(3)加入dataB,dataC,front=-1,rear=2:

加入dataB、dataC -1            2               dataA         dataB        dabaC                         

(4)取出dataA,front=0,rear=2,每取出一个元素,将front的值加1:

取出dataA 0       2                dataB  dataC          

(5)加入dataD,front=0,rear=3,此时rear=MAXSIZE-1 ,表示队列已满

加入dataD     0         3                       dataB     dataC    dataD  

(6)取出dataB,front =1,rear=3:

取出dataB    1          3                               dataC    dataD 

对于以上队列操作,可以用Python语言实现一个队列的操作

import sysMAX=10            #定义队列的大小
queue=[0]*MAX
front=rear=-1
choice=''
while rear<MAX-1 and choice !='e':choice=input('[a]表示加入一个数值,[d]表示取出一个数值,[e]表示跳出此程序: ')if choice=='a':val=int(input('[请输入数值]: '))rear+=1queue[rear]=valelif choice=='d':if rear>front:front+=1print('[取出数值为]: [%d]' %(queue[front]))queue[front]=0else:print('[队列已经空了]')sys.exit(0)else:print()print('------------------------------------------')
print('[输出队列中的所有元素]:')if rear==MAX-1:print('[队列已满]')
elif front>=rear:print('没有')print('[队列已空]')
else:while rear>front:front+=1print('[%d] ' %queue[front],end='')print()print('------------------------------------------')
print()

执行结果如下

2用链表实现队列

我们以学生姓名和成绩的结构数据建立队列的节点,加上front和rear指针,这个类的声明如下:

class student:def __init__(self):self.name=' '*20self.score=0self.next=Nonefront=student()
rear=student()
front=None
rear=None

在队列中加入新节点等于加入到队列的末端,而删除节点就是将此队列的最前端的节点删除。添加和删除操作如下:

def enqueue(name, score):  # 把数据加入队列global frontglobal rearnew_data=student()  # 分配内存给新元素new_data.name=name  # 给新元素赋值new_data.score = scoreif rear==None:      # 如果rear为None,表示这是第一个元素front = new_dataelse:rear.next = new_data    # 将新元素连接到队列末尾
rear = new_data         # 将rear指向新元素,这是新的队列末尾new_data.next = None    # 新元素之后无其他元素def dequeue(): # 取出队列中的数据global frontglobal rearif front == None:print('队列已空!')else:print('姓名:%s\t成绩:%d ....取出' %(front.name, front.score))front = front.next    # 将队列前端移到下一个元素

我们使用链表来设计一个队列的程序

class student:def __init__(self):self.name=' '*20self.score=0self.next=Nonefront=student()
rear=student()
front=None
rear=Nonedef enqueue(name, score):  # 把数据加入队列global frontglobal rearnew_data=student()  # 分配内存给新元素new_data.name=name  # 给新元素赋值new_data.score = scoreif rear==None:      # 如果rear为None,表示这是第一个元素front = new_dataelse:rear.next = new_data    # 将新元素连接到队列末尾
rear = new_data         # 将rear指向新元素,这是新的队列末尾new_data.next = None    # 新元素之后无其他元素def dequeue(): # 取出队列中的数据global frontglobal rearif front == None:print('队列已空!')else:print('姓名:%s\t成绩:%d ....取出' %(front.name, front.score))front = front.next    # 将队列前端移到下一个元素def show():     # 显示队列中的数据global frontglobal rearptr = frontif ptr == None:print('队列已空!')else:while ptr !=None: # 从front到rear遍历队列print('姓名:%s\t成绩:%d' %(ptr.name, ptr.score))ptr = ptr.nextselect=0
while True:select=int(input('(1)加入 (2)取出 (3)显示 (4)离开 => '))if select==4:breakif select==1:name=input('姓名: ')score=int(input('成绩: '))enqueue(name, score)elif select==2:dequeue()else:show()

执行如下:

转载于:https://www.cnblogs.com/jzxs/p/10372012.html

python队列的实现相关推荐

  1. c++ 优先队列_什么是队列?(Python队列)

    什么是队列?(Python队列) 前言 上篇文章介绍了 Python 中的多线程​mp.weixin.qq.com .今天来介绍下编程中常会用到的一个数据结构 - 队列. 不知道大家是否还记得什么是数 ...

  2. python队列只能一个个读取吗_python队列Queue的详解

    Queue Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递 基本FIFO队列 clas ...

  3. python队列实现_Python 数据结构之队列的实现

    Python 队列 Queue 队列是一种先进先出(FIFO)的数据类型, 新的元素通过 入队 的方式添加进 Queue 的末尾, 出队 就是从 Queue 的头部删除元素. 用列表来做 Queue: ...

  4. python 优先队列_示例讲解:python队列原理及实现方法与操作思路

    今天为大家带来的内容是:示例讲解:python队列原理及实现方法与操作思路 本文内容主要介绍了python队列原理及实现方法,结合实例形式详细分析了Python队列的概念.原理.定义及基本操作技巧,需 ...

  5. Python队列Queue

    Python队列Queue Queue是python标准库中的线程安全的队列(FIFO),提供了一个多线程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递. 常见方法 1.put( ...

  6. 《Python全栈开发:Python 队列(queue)》

    一.Python 队列(queue) Python的Queue模块中提供了同步的.线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列Pr ...

  7. Python队列左侧元素弹出queue.popleft()

    [小白从小学Python.C.Java] [Python-计算机等级考试二级] [Python-数据分析] Python队列左侧元素弹出 queue.popleft() [太阳]选择题 以下Pytho ...

  8. python队列_Python队列

    python队列 In our previous tutorial we have discussed about python time sleep function of the time mod ...

  9. python队列queue不堵塞_python 队列(queue)阻塞

    背景:python 队列 queue.Queue 或 multiprcessing.Queue 或其他队列在写入队列或从队列中读取元素时,都有可能会发生线程阻塞. 下面来说一下阻塞的类型,然后怎么避免 ...

  10. Python 队列 queue

    Python 队列 一.分类 1. Queue 标准队列,先进先出(FIFO),队尾插入,队头取元素. 2. LifoQueue 后进先出(first in last out).与栈的类似 3. Pr ...

最新文章

  1. CVPR 2018 | 腾讯AI Lab入选21篇论文详解
  2. 让Oracle SQL Developer显示的时间包含时分秒
  3. PHP新浪乐居面试题,一个朋友去新浪乐居面试时的面试题(PHP)
  4. loj#2542 [PKUWC2018]随机游走 (概率期望、组合数学、子集和变换、Min-Max容斥)
  5. QT5.4 vs2013静态加载插件的sqlite静态编译
  6. 【今日CV 视觉论文速览】Part2 1 Feb 2019
  7. App Transport Security has blocked a cleartext
  8. SpacePack 运维工具之 Auto fdisk
  9. html设置等宽字体效果
  10. android 上拉抽屉,Flutter上拉抽屉实现
  11. VS2019:添加现有项目 / 现有cpp文件
  12. Spring Boot 集成 批处理框架Spring batch
  13. 安卓获取string.xml文件里的值
  14. [APK签名] jarsigner APK V1签名
  15. 你公司哪个部门是“老大”?
  16. 超超超简单Typora修改字体颜色
  17. 软件工程专业电商网站毕业论文答辩实录(基于SSM+VUE前后端分离的 “依伴汉服”网)
  18. 关于使用华为手机进行自动化测试的一个坑
  19. 中国照片编辑软件市场现状研究分析与发展前景预测报告(2022)
  20. 暑假N天乐【比赛篇】 —— 2019牛客暑期多校训练营(第一场)

热门文章

  1. php实现钟表,用html5实现一个简单的钟表外观
  2. 三数之和java实现ArrayList-leetcode算法编程-探索字节跳动面试
  3. matlab画出鸢尾花数据集散点图尾花,鸢尾花数据集分以及绘制散点矩阵图
  4. 3D打印机将用于太空食物 未来或可打印披萨
  5. 数显之家快讯:【SHIO世硕心语】一个人成功之前,需要失去五样东西!
  6. excel熵值法计算权重_指标合成的客观权重法之熵权法
  7. 2-网络编程学习环境搭建
  8. 异常:org.hibernate.cache.NoCachingEnabledException: Second-level cache is not enabled for usage [hiber
  9. Mysqldump备份报错1449
  10. 流量卡之家:AI、无人机、物联网、自动驾驶 未来取决于5G