青岛大学_王卓老师【数据结构与算法】Week05_13_队列的顺序表示和实现1_学习笔记

本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。

一方面用于学习记录与分享,

另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。

如有侵权,请留言作删文处理。

课程视频链接:

数据结构与算法基础--第05周13--3.5队列的表示和实现2--3.5.2队列的顺序表示和实现1

📚 【Week05】13_队列的顺序表示和实现1

队列

顺序队列空栈、入队和出队示意图

❓ 思考:存在什么问题??

设数组大小为 MAXQSIZE,rear = MAXQSIZE 时,发生溢出。

解决假上溢的方法

(1) 将队中元素依次向队头方向移动。

缺点:浪费时间。每移动一次,队中元素都要移动。

(2) 将队空间设想成一个循环的表,即分配给队列的 m 个存储单元可以循环使用。

当 rear 为 maxqsize 时,若向量的开始端空着,又可从头使用空着的空间。

当 front 为 maxqsize 时,也是一样。

就好像下标为 0 的位置是接在下标为 5 的位置后面。

😊 解决假上溢的方法------引入循环队列

base[0] 接在 base[MAXQSIZE - 1] 之后,若 rear + 1 == M,则令 rear = 0;

实现方法:

利用 模运算(mod,C语言中:%)。

插入元素:

c++ 复制代码
Q.base[Q.rear] = x;
Q.rear = (Q.rear + 1) % MAXQSIZE;

删除元素:

c++ 复制代码
x = Q.base[s.front];
Q.front = (Q.front + 1) % MAXQSIZE;

循环队列:循环使用为队列分配的存储空间。

循环队列入队和出队

❓ 思考:循环队列时会出现队空:front == rear,队满:front == rear,如何判断队空和队满?

解决方案:

(1) 另外设一个标志以区别队空和队满

(2) 另设一个变量,记录元素个数

(3) 少用一个元素空间

循环队列解决队满时判断方法------少用一个元素空间

相关推荐
一 乐21 分钟前
考研论坛平台|考研论坛小程序系统|基于java和微信小程序的考研论坛平台小程序设计与实现(源码+数据库+文档)
java·数据库·学习·考研·微信·小程序·源码
William_Edmund1 小时前
C++ 算法学习——1.8 悬线法
学习
朝九晚五ฺ1 小时前
【Linux探索学习】第三弹——Linux的基础指令(下)——开启新篇章的大门
linux·运维·学习
IM_DALLA1 小时前
【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL74
学习·fpga开发·verilog学习
王俊山IT2 小时前
C++学习笔记----8、掌握类与对象(五)---- 嵌套类与类中枚举
开发语言·c++·笔记·学习
北极无雪2 小时前
Spring源码学习(拓展篇):SpringMVC中的异常处理
java·开发语言·数据库·学习·spring·servlet
小码狐3 小时前
并查集【数据结构与算法】【C语言版-笔记】
数据结构·笔记·并查集·c语言版
问道飞鱼3 小时前
每日学习一个数据结构-默克尔树(Merkle Tree)
数据结构·学习·默克尔树
William_Edmund3 小时前
Python 语言学习——应用1.2 数字图像处理(第二节,变换)
人工智能·学习·计算机视觉
weixin_514548894 小时前
机器学习课程学习周报十五
人工智能·学习·机器学习