Python描述数据结构之链队列篇
文章目录
- 前言
- 1. 链队列
- 2. 基本操作
- 3. 代码实现
- 结束语
前言
本篇章主要介绍链队列,并用Python实现其基本操作。
1. 链队列
队列的链式存储结构称为链队列,也是在单链表的基础上进行的修改,它是一个同时带有队首指针front和队尾指针rear的单链表,队首指针指向队首节点,队尾指针指向队尾结点。其结点定义同单链表结点:
class LinkNode(object):def __init__(self, data=None, next=None):self.data = dataself.next = next
队空条件: f r o n t = = r e a r front==rear front==rear。
出队时,先取出队首元素,将其从链表中移除,并让front指向其下一个结点,若该结点为最后一个结点,则置front和rear都为None。
入队时,先建立一个新结点,将新结点插入到链表的尾部,并让rear指向这个新插入的结点,若原队列为空时,则让front也指向这个新插入的结点。
2. 基本操作
操作名称 | 操作说明 |
---|---|
CreateLinkQueue(val_list) | 创建链队列 |
IsEmpty() | 判断链队列是否为空 |
LengthQueue() | 返回链队列的长度 |
Traverse() | 打印出链队列里的数据元素 |
EnQueue(data) | 入队 |
DeQueue() | 出队 |
GetHead() | 取队首元素 |
3. 代码实现
class LinkQueue(object):def __init__(self):# 用这种方法创建的front和rear是不一样的, 地址不一样# self.front = LinkNode(None)# self.rear = LinkNode(None)# 用下面这种方法temp_node = LinkNode(None)self.front = temp_nodeself.rear = temp_nodedef CreateLinkQueue(self, val_list):for val in val_list:self.EnQueue(val)def IsEmpty(self):if self.front == self.rear:return Trueelse:return Falsedef LengthQueue(self):prehead = self.frontcount = 0while prehead.next:count += 1prehead = prehead.nextreturn countdef EnQueue(self, e):new_node = LinkNode(e)if self.IsEmpty():self.front.next = new_nodeself.rear.next = new_nodeself.rear = self.rear.nextdef DeQueue(self):if self.IsEmpty():print('队为空!')exit()else:temp = self.front.nextself.front.next = temp.nextif self.rear == temp:# 这个结点是尾结点self.front = self.rearreturn temp.datadef Traverse(self):prehead = self.frontwhile prehead.next:prehead = prehead.nextprint(prehead.data, end=' ')print('')def GetHead(self):return self.front.next.data
测试代码如下:
if __name__ == '__main__':q1 = LinkQueue()q1.CreateLinkQueue([1, 3, 5, 7, 9])print('队列里的元素为: ', end='')q1.Traverse()print('队列的长度为: %d' % q1.LengthQueue())print('队首元素为: %d' % q1.GetHead())print('出队: ', end='')for i in range(q1.LengthQueue()):print(q1.DeQueue(), end=' ')
运行结果如下:
结束语
链式队列比较适合于数据元素变动较大的情形,如果程序中要使用多个队列,最好也使用链式队列。
Python描述数据结构之链队列篇相关推荐
- 【数据结构Python描述】优先级队列描述“银行VIP客户插队办理业务”及“被插队客户愤而离去”的模型实现
文章目录 一.支持插队模型的优先级队列 队列ADT扩充 队列记录描述 方法理论步骤 `update(item, key, value)` `remove(item)` 二.支持插队模型的优先级队列实现 ...
- Python描述数据结构之链表实战篇
文章目录 前言 1. LeetCode21: 合并两个有序链表 2. LeetCode237: 删除链表中的节点 3. 剑指 Offer 18: 删除链表的节点 4. LeetCode234: 回文链 ...
- Python描述数据结构之图实战篇
文章 前言 1. LeetCode684:冗余连接 2. LeetCode841:钥匙和房间 3. LeetCode1387:将整数按权重排序 4. LeetCode997:找到小镇的法官 前言 ...
- Python描述数据结构之数组和特殊矩阵篇
文章目录 前言 1. 基本概念 2. 存储方式 3. 特殊矩阵 3.1 对称矩阵 3.2 三角矩阵 3.3 三对角矩阵 3.4 稀疏矩阵 前言 本篇章主要介绍数组及特殊矩阵,包括数组的基本概念.数 ...
- 用Python实现数据结构之队列
队列 队列与栈的类型很相似,但它遵循的原则是先进先出(FIFO),也就是元素插入的时候只能在该数据结构的末端,而删除只能删除最前面的元素.队列同样应用广泛,例如打印机的队列或者是一个web服务器响应请 ...
- 数据结构探险——队列篇
以下内容源于慕课网的学习整理,如有侵权,请告知删除. 1.什么是队列? (1)先入先出的模型(FIFO). (2)队头,队尾. (3)细分为普通队列,环形队列. 普通队列存在的问题 如果买票者不动,售 ...
- Python写数据结构:循环队列
#!/usr/bin/python3.5 #_*_coding:utf-8_*_class Queue():def __init__(self,capacity):self.queue = [None ...
- python环形队列_Python 实现数据结构-循环队列的操作方法
今天我们来到了循环队列这一节,之前的文章中,我介绍过了用python自带的列表来实现队列,这是最简单的实现方法. 但是,我们都知道,在列表中删除第一个元素和删除最后一个元素花费的时间代价是不一样的,删 ...
- 链式队列,队列篇(链式队列的出队入队操作)
数据结构,队列篇(链式队列) 前言: 上一篇博主简单讲解了顺序队列和循环队列,今天讲解队列最后一篇链式队,链式队在数据结构中用到比较多,用来做一些排队的算法,还有链式队列是也是和链式栈一样采用链表的方 ...
最新文章
- 用计算机绘制函数图象教案,信息技术应用 用计算机画函数图象教学设计(教案)...
- PHP扩展高性能日志系统SeasLog简单上手
- win7录制系统声音 加入立体声混音 camtasia recorder录屏
- shell字符串操作集
- 【Docker】Docker 安装 Prometheus并且交给 grafana
- 教你如何在机器学习竞赛中更胜一筹(上)
- 开课吧Java课堂:Transient和volatile修饰符如何运用
- union union all
- GJB 质量保证大纲(模板)
- JxBrowser的概述与简单应用
- java中文转英文_中文转换为英文
- 计算机开机密码设置要求,电脑开机密码怎么设置,开机密码设置很简单!
- 字数统计,一个英文字母算一个字,一个汉字算一个字,一个符号算一个字
- 物不知数用计算机解法怎么解,物不知数
- 计算机网络隧道技术,隧道技术-高级计算机网络.ppt
- 看完这篇 教你玩转渗透测试靶机vulnhub——DC9
- 计算机如何与电视屏幕连接,电脑如何与电视机连接
- Vue3 使用expose让父组件直接修改子组件的值
- 山东大学计算机学院夏令营经验贴.2019
- 喜马拉雅android sdk接入,喜马拉雅(com.ximalaya.ting.android) - 8.0.1.3 - 应用 - 酷安