【数据结构与算法】队列(顺序存储)

简介: 【数据结构与算法】队列(顺序存储)

一.队列的原理

队列也是一种线性结构,只不过是一种受限制的线性结构,只能在其头进行删除,尾进行添加.

因为队列是线性结构,所以我们可以通过顺序表来实现,也可以通过链表来实现,本篇我们先以顺序表来实现.

只要我们掌握了顺序表,本篇就很简单.

可以联想到我们日常中的排队,先排先办事!

二.队列的结构

首先我们还是先来讲结构,很明显我们需要用到数组,为了我们能够很好的找到数组的头和尾,我们可以定义两个数.

可能你有点迷糊,没事,我来画个图:

这个rear是随着添加元素而变化的,指在数组添加元素的后面,不是最大长度的后面.

三.队列初始化

队列的初始化就是一个空数组,frontrear都指向下标0

画个图就是这样:

都等于数组下标为0的地方.

四.判断队列是否满或空

1.是否为满

这个判断就会很简单,每当我们添加一个数据时,我们对rear记录的数组下标增加1.

那么如果队列满的话,rear就会和最大长度一样,以此来判断.

2.是否为空

是否为空也很好判断了,因为我们一开始初始化就是一个空的数组,只需要判断front是否与rear相等即可.,相等即为空

五.入队操作

顺序表的入队操作就很简单了,相当于为空数组赋值就可以了,只不过我们只能依次添加,因为是队列嘛,只能尾部添加.

所以你知道为什么我们用rear了吧,用这个来当下标,进行数据的添加,每添加一次,就对其+1,后面又接着添加,直到rear等于数组最大长度了就满了,添加不了.

六.队列的遍历

就跟数组的遍历一样简单的很,一头一尾作为循环的条件.

七.出队操作

1.前移

跟顺序表一样,乾坤大罗伊,直接将front指向的位置,赋值成为其后面一个的值,最后rear减个1即可.

传的参数p,只不过是拿取要删除的值.

这里的循环条件要注意,所以的数据要向前移动一步,我们又是从front开始的,所以我们需要对rear-1进行判断,因为下面我们需要后一个也就是i+1这个下标.

如果不对rear减1,会访问越界,导致程序崩溃.

2.后指

既然我们可以通过前移,达到删除元素的效果,那我们将front向后面指一下,那不就达到删除的效果了嘛,我们访问不到.

但是你不能一直往后面移动,不然就越界了,所以对front做了一个判断.

八.其他小接口

1.获取队列首元素

2.获取队列长度

3.清除队列

酒.总结

其实当你熟悉了顺序表,那么顺序存储的队列很简单,就是数组,只不过我们特殊在头和尾部的操作.

  • 队列是一种先进先出(FIFO)的数据结构。
  • 队列通常具有两个基本操作:入队和出队。
  • 入队操作将元素添加到队列的末尾。
  • 出队操作将队列的第一个元素删除并返回。
  • 队列的底层实现可以使用数组或链表。


相关文章
|
14天前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
90 9
|
17天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
1月前
初步认识栈和队列
初步认识栈和队列
58 10
|
1月前
|
存储 安全 数据库
除了 HashMap,还有哪些数据结构可以实现键值对存储?
【10月更文挑战第11天】 除了`HashMap`,其他常见支持键值对存储的数据结构包括:`TreeMap`(基于红黑树,键有序)、`LinkedHashMap`(保留插入顺序)、`HashTable`(线程安全)、`B-Tree`和`B+Tree`(高效存储大量数据)、`SkipList`(通过跳跃指针提高查找效率)及`UnorderedMap`(类似`HashMap`)。选择合适的数据结构需根据排序、并发、存储和查找性能等需求。
|
1月前
|
存储 算法 定位技术
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
这篇文章主要介绍了稀疏数组和队列的概念、应用实例以及如何使用数组模拟队列和环形队列的实现方法。
20 0
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
|
1月前
【数据结构】-- 栈和队列
【数据结构】-- 栈和队列
16 0
|
1月前
探索数据结构:队列的的实现与应用
探索数据结构:队列的的实现与应用
|
1月前
|
存储 C语言
栈和队列题目练习
栈和队列题目练习
16 0
|
5天前
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
14 1
|
8天前
|
存储 算法 Java
数据结构的栈
栈作为一种简单而高效的数据结构,在计算机科学和软件开发中有着广泛的应用。通过合理地使用栈,可以有效地解决许多与数据存储和操作相关的问题。