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

embedded/2025/3/23 18:44:30/

目录

二、队列

(一)、定义

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、顺序队列:队列的顺序表示(用一维数组)

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

python">顺序队列定义如下:
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 循环队列初始化
python">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判断对空
python">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、循环队列入队----环状位移要取余
python">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循环队列出队

python">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、获取队首元素
python">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

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

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

python">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、链式队列出队

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

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

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


http://www.ppmy.cn/embedded/174591.html

相关文章

【鸿蒙开发】Hi3861学习笔记- PWM

00. 目录 文章目录 00. 目录01. 概述02. PWM相关类型2.1 hi_pwm_clk_source2.2 hi_pwm_port 03. PWM相关API3.1 hi_pwm_init3.2 hi_pwm_deinit3.3 hi_pwm_start3.4 hi_pwm_stop 04. 硬件设计05. 软件设计06. 实验现象07. 附录 01. 概述 PWM(Pulse Width Modulation , 脉冲宽度…

利用Python爬虫获取Shopee(虾皮)商品详情:实战指南

在跨境电商领域,Shopee(虾皮)作为东南亚及台湾地区领先的电商平台,拥有海量的商品信息。无论是进行市场调研、数据分析,还是寻找热门商品,获取Shopee商品详情都是一项极具价值的任务。然而,手动…

科技查新和查收查引有什么区别?

信息的准确性与新颖性是科研领域的重要指标,它们不仅能够确保研究质量、锁定研究目标,还能推动科技创新。在科研过程中,科技查新与查收查引作为两种关键的信息咨询服务,发挥着不可替代的作用。尽管两者紧密相关,但在目…

【商城实战(44)】商城实战避坑指南:从问题排查到经验升华

【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配&#xf…

为什么TCP需要三次握手?一次不行吗?

文章目录 1. 三次握手的过程2. 为什么需要三次握手?3. 握手过程中每一步的具体作用4. 简单比喻5. 为什么是三次握手,而不是两次或四次?6. 三次握手中的序列号有什么作用?7. 总结 1. 三次握手的过程 三次握手是建立 TCP 连接的过程…

微信小程序:用户拒绝小程序获取当前位置后的处理办法

【1】问题描述: 小程序在调用 wx.getLocation() 获取用地理位置时,如果用户选择拒绝授权,代码会直接抛出错误。如果再次调用 wx.getLocation() 时,就不会在弹窗询问用户是否允许授权。导致用户想要重新允许获取地理位置时&#x…

WPF 中的 GridSplitter 详解

1. 什么是 GridSplitter? GridSplitter 是 WPF 提供的一个控件,用于调整 Grid 布局的行或列的大小。它可以让用户在运行时拖动分隔线,以改变相邻的行或列的大小,而不需要修改 XAML 代码。 2. GridSplitter 的基本用法 &#xff…

maven使用install将jar包编译到本地仓库管理

要install的jar包 mvn install:install-file -DgroupIdcn.qiufeng -DartifactIdDJGenHsmAPI -Dversion3.1.0d -Dpackagingjar -DfileDJGenHsmAPI-3.1.0d.jar 重点是版本号必须使用编译后的版本号 发布成功后