数据结构(python)-------栈和队列2

目录

二、队列

(一)、定义

1. 定义

2. 逻辑结构

3. 存储结构

4. 运算规则

5. 实现方式

(二)、队列与一般线性表的区别

一般线性表                                           

队列

(三)、分类

1、顺序队列:队列的顺序表示(用一维数组)

1.1队列的顺序表示--用一维数组base[M]

存在问题

2、循环队列

2.1 循环队列初始化

 2.2判断对空

2.3、循环队列入队----环状位移要取余

2.4、获取队首元素

3.链式队列:用单链表表示

3.1判断队空

3.2、链式入队

 3.3、链式队列出队

 3.4、获取队首元素


二、队列

(一)、定义

1. 定义

只能在表的一端(队尾)进行插入,在另一端(队首或队头)进行删除运算的线性表

2. 逻辑结构

与线性表相同,仍为一对一关系

3. 存储结构

顺序队列链式队列存储均可

4. 运算规则

先进先出FIFO

5. 实现方式

关键是编写入队出队函数,具体实现依顺序队或链队的不同而不同

(二)、队列与一般线性表的区别

队列是一种特殊(操作受限)的线性表

区别:仅在于运算规则不同

一般线性表                                           

逻辑结构:一对一                    

存储结构:顺序表、链表        

运算规则:随机、顺序存取

队列

逻辑结构:一对一                    

存储结构:顺序队列、链式队列

运算规则:先进先出

(三)、分类

1、顺序队列:队列的顺序表示(用一维数组)

利用一组连续的存储单元(一维数组) 依次存放从队首到队尾的各个元素,称为顺序队列

顺序队列定义如下:
class SeqQueue:def __init__(self, max):self.max = max 	# 队列最大容量# 存储队列元素的数组self.data = [None for i in range(self.max)]self.front = 0	 # 队首指针self.rear = 0 	 # 队尾指针
1.1队列的顺序表示--用一维数组base[M]

入队和出队

存在问题

真假溢出

解决办法-----循环队列 

2、循环队列

 

2.1 循环队列初始化
class CircleQueue(object):def __init__(self,max):# 队列最大容量self.max = max# 存储队列元素的数组self.data = [None for i in range(self.max)]# 队首指针self.front = 0# 队尾指针self.rear = 0
 2.2判断对空
class CircleQueue(object):def __init__(self,max):# 队列最大容量self.max = max# 存储队列元素的数组self.data = [None for i in range(self.max)]# 队首指针self.front = 0# 队尾指针self.rear = 0
2.3、循环队列入队----环状位移要取余
def push(self,val):''':Desc  入队         :param  val:待入队关键字'''# 如果队列满了,抛出异常if (self.rear + 1) % self.max == self.front:raise IndexError("队列为满")# 在队尾插入新的关键字self.data[self.rear] = val# 修改队尾指针self.rear = (self.rear + 1) % self.max

2.4循环队列出队

def pop(self):''':Desc 将队首元素出队'''# 如果队列为空,抛出异常if self.empty():raise IndexError("队列为空")# 队列不为空,获取队首元素cur = self.data[self.front]# 修改队首指针,指向下一个位置self.front = (self.front + 1) % self.max# 返回原队首元素return cur
2.4、获取队首元素
def pop(self):''':Desc 将队首元素出队'''# 如果队列为空,抛出异常if self.empty():raise IndexError("队列为空")# 队列不为空,获取队首元素cur = self.data[self.front]# 修改队首指针,指向下一个位置self.front = (self.front + 1) % self.max# 返回原队首元素return cur

3.链式队列:用单链表表示

设立一个队首指针front ,指向队首元素。

初始化front=None

入队:判断队列是否为空。如果队列为空,将队首指针指向待插入的新节点。若队列不为空,则遍历到队尾元素,将新节点插入到队尾。

出队:首先判断队列是否为空,若是队列为空,则抛出异常;否则,删除队首节点。

队列为空front is None

class Node(object):def __init__(self,data):''':Desc   队列节点存储结构'''# 数据域self.data = data# 指针域self.next = None
class LinkedQueue(object):def __init__(self):''':Desc   队列初始化'''# 队首指针指向空self.front = None
3.1判断队空
class LinkedQueue(object):def __init__(self):''':Desc   队列初始化'''# 队首指针指向空self.front = None
3.2、链式入队

入队:判断队列是否为空。如果队列为空,将队首指针指向待插入的新节点。若队列不为空,则遍历到队尾元素,将新节点插入到队尾。

def push(self,val):''':Desc 将关键字入队     :param  val: 关键字'''# 新节点new = Node(val)# 如果队列为空if self.front == None:# 将队首指针指向新节点self.front = new# 如果队列不为空else:# 声明cur指针cur = self.front# 通过cur指针遍历队列while cur.next != None:cur = cur.next# 在队尾插入元素cur.next = new

 3.3、链式队列出队

出队:首先判断队列是否为空,若是队列为空,则抛出异常;否则,删除队首节点

def pop(self):''':Desc  将队首元素出队'''# 如果队列为空,抛出异常if self.empty():raise IndexError("队列为空")# 如果队列不为空else:cur = self.front# 将队首指针指向队首节点的后继节点self.front = self.front.next# 返回原本队首节点return cur

 3.4、获取队首元素
peek(self):''':Desc  获取队首元素        :return:  返回队首元素'''# 如果队列为空,抛出异常if self.empty():raise IndexError("队列为空")# 如果队列不为空else:# 返回队首元素return self.front

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/73994.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot的“校园招聘网站”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“校园招聘网站”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统整体功能图 局部E-R图 系统首页界面 系统注册…

投资日记_道氏理论技术分析

主要用于我自己参考,我感觉我做事情的时候容易上头,忘掉很多事情。 技术分析有很多方法,但是我个人相信并实践的还是以道氏理论为根本的方法。方法千千万万只有适合自己价值观,习惯,情绪,性格的方法才是好的…

ceph运维硬件规划技巧

在规划Ceph集群的硬件配置时,需要综合考虑性能、成本、冗余、可扩展性以及特殊场景需求等因素。以下是关于Ceph硬件规划的关键技巧和建议,涵盖存储设备、网络、服务器配置、容量规划、冗余策略等多个方面: 1. 硬件选型建议 存储设备 存储节点…

Windows主机、虚拟机Ubuntu、开发板,三者之间文件互传

以下内容源于日常学习的整理,欢迎交流。 下图是Windows主机、虚拟机Ubuntu、开发者三者之间文件互传的方式示意图: 注意,下面谈及的所有方式,都要求两者的IP地址处于同一网段,涉及到的软件资源见felm。 一、Windows主…

Softmax温度调节与注意力缩放:深度神经网络中的平滑艺术

Softmax温度调节与注意力缩放:深度神经网络中的平滑艺术 在深度学习的精密机械中,有些细微的调整机制往往被视为理所当然,却实际上蕴含着深刻的数学洞察和巧妙的工程智慧。今天,我们将探讨两个看似独立却本质相通的机制&#xff…

RIP路由欺骗攻击与防御实验详解

一、基础网络配置 1. 路由器R1配置 interface GigabitEthernet0/0/0ip address 192.1.2.254 255.255.255.0 ! interface GigabitEthernet0/0/1ip address 192.1.3.254 255.255.255.0 ! router rip 1version 2network 192.1.2.0network 192.1.3.0 2. 路由器R2配置 interface…

阿里云平台Vue项目打包发布

目录: 1、vue项目打包2、通过ngixn发布vue的打包文件 1、vue项目打包 在你的vue项目下执行npm run build命令进行打包。 2、通过ngixn发布vue的打包文件 直接将打包的dist文件拷贝到nginx目录下即可。 修改nginx.conf的配置文件的相关配置,如端口或者ro…

《基于Spring Boot+Vue的智慧养老系统的设计与实现》开题报告

个人主页:@大数据蟒行探索者 一、研究背景及国内外研究现状 1.研究背景 根据1982年老龄问题世界大会联合国制定的标准,如果一个国家中超过65岁的老人占全国总人口的7%以上,或者超过60岁的老人占全国总人口的10%以上,那么这个国家将被定义为“老龄化社会”[1]。 随着国…

SpringCache @Cacheable 在同一个类中调用方法,导致缓存不生效的问题及解决办法

由于项目需要使用SpringCache来做一点缓存,但自己之前没有使用过(其实是没有听过)SpringCache,于是,必须先学习之。 显然,就是在同一个类中,MethodA 调用了 MethodB,那么 MethodB 上…

2025-03-20(DS复习):详细介绍一下Databricks 的Delta Lake

Delta Lake 是 Databricks 推出的一种开源存储层,它构建在现有数据湖(如 Amazon S3、Azure Data Lake Storage、Google Cloud Storage)之上,为数据湖提供了数据仓库级别的可靠性、性能和管理功能。Delta Lake 解决了传统数据湖的许…

在VMware上部署【Ubuntu】

镜像下载 国内各镜像站点均可下载Ubuntu镜像,下面例举清华网站 清华镜像站点:清华大学开源软件镜像站 | Tsinghua Open Source Mirror 具体下载步骤如下: 创建虚拟机 准备:在其他空间大的盘中创建存储虚拟机的目录&#xff0c…

初入ARM,点灯,按键与中断相结合

与MCU不同,ARM属于功能更复杂,更强大的SOC,是可以移植操作系统的,但是在最开始学习arm,需要了解arm的运行方式,所以现在使用的是裸机开发。arm系统有多种工作模式,分别是User,IRQ&am…

Moonlight-16B-A3B: 变革性的高效大语言模型,凭借Muon优化器打破训练效率极限

近日,由Moonshot AI团队推出的Moonlight-16B-A3B模型,再次在AI领域引发了广泛关注。这款全新的Mixture-of-Experts (MoE)架构的大型语言模型,凭借其创新的训练优化技术,特别是Muon优化器的使用,成功突破了训练效率的极…

风尚云网|前端|JavaScript性能优化实战:从瓶颈定位到高效执行

JavaScript性能优化实战:从瓶颈定位到高效执行 JavaScript性能优化 在移动优先和Web应用日益复杂化的今天,JavaScript性能优化已成为前端工程师的必修课。本文将通过真实场景案例,深入解析从性能瓶颈定位到具体优化策略的完整闭环&#xff…

强大的AI网站推荐(第一集)—— Devv AI

网站:Devv AI 号称:最懂程序员的新一代 AI 搜索引擎 博主评价:我的大学所有的代码都是使用它,极大地提升了我的学习和开发效率。 推荐指数:🌟🌟🌟🌟🌟&#x…

使用 .NET Core 的本地 DeepSeek-R1

使用 .NET 在我的 MacBook Pro 上与当地 LLM 聊天的历程。 如今,只需使用浏览器即可轻松使用 ChatGPT 或其他 genAI。作为开发人员,我们可以通过直接集成 OpenAI API 等来做更复杂的事情。如果我们想在自己的机器上运行 LLM,只是为了找人聊天…

将 VOC 格式 XML 转换为 YOLO 格式 TXT

目录 1. 导入必要的模块 2. 定义类别名称 3. 设置文件路径 完整代码 1. 导入必要的模块 import os import xml.etree.ElementTree as ET os:用于文件和目录操作,例如创建目录、遍历文件等。 xml.etree.ElementTree:用于解析XML文件&#…

Visual Studio调试的技巧

1.什么是bug? bug:程序漏洞,也就是程序中存在的问题。 2.什么是调试? 当我们发现了程序中的问题后就会解决问题,前提是要找到问题,那么进行调试(debug)以此来找到问题。 3.debug…

C++ 各种map对比

文章目录 特点比较1. std::map2. std::unordered_map3. std::multimap4. std::unordered_multimap5. hash_map(SGI STL 扩展) C 示例代码代码解释 特点比较 1. std::map 底层实现:基于红黑树(一种自平衡的二叉搜索树&#xff09…

fontTools工具的使用介绍

前言 python工具库fontTools,我是用来压缩前端字体的,优化前端请求速度的;使用的过程中,遇到了不少的坑,把这个过程记录下来,防止再犯。 安装 # fontTools 4.56.0 pip install fontTools提取子字体集 方…