(队列篇)1、队列的概念及其基本操作(采用顺序存储结构,C++代码编写,包括初始化、入队、出队、获取当前队列长度等)

您所在的位置:网站首页 循环队列和顺序队列一样吗对吗 (队列篇)1、队列的概念及其基本操作(采用顺序存储结构,C++代码编写,包括初始化、入队、出队、获取当前队列长度等)

(队列篇)1、队列的概念及其基本操作(采用顺序存储结构,C++代码编写,包括初始化、入队、出队、获取当前队列长度等)

2024-07-11 22:17| 来源: 网络整理| 查看: 265

队列详解 一、队列概念二、基本操作1、初始化队列,对 front 和 rear 赋值2、队列当前长度3、队列判空4、队列判满5、入队6、出队7、读取队头元素 三、整体代码过程

一、队列概念

队列是一种操作受限的线性表,只允许在一端进行插入,在另一端删除。其操作的特性是先进先出First In First Out(FIFO),记得区分栈和队列。

具体过程如图: 在这里插入图片描述 此篇文章是采用顺序存储的方式实现队列,在内存中分配一块连续的存储单元存放队列中的元素(相当于创建一个数组而已),还要建立 front 和 rear 指针(虽说是指针,其实就是记住队头和队尾的位置,方便进行插入和删除),本文中 front 指向队头元素,rear 指向队尾元素的下一个位置。

二、基本操作

在进行相关操作之前,先要创建队列里面的基本元素(结构体):

#define MaxSize 100 //最大存储个数 //非循环队列 typedef int ElemType; //typedef用于取别名,这里int取个别名,方便统一data的类型 typedef struct { ElemType data[MaxSize]; int front; /*头指针*/ int rear; /*尾指针,若队列不空,指向队列元素的下一个位置*/ }SqQueue; //SqQueue是这个结构体的别名

(tips:如果对 & 引用有问题的话,跳到最后去看一下我推荐的文章吧,我主要在函数里面用的是引用传递)

1、初始化队列,对 front 和 rear 赋值 //1、初始化一个空队列 void InitQueue(SqQueue &Q) { Q.front = 0; //均初始化为0 Q.rear = 0; } 2、队列当前长度

返回的是真实队列的长度。

//2、队列当前长度 int QueueLength(SqQueue Q) { return (Q.rear - Q.front + MaxSize) % MaxSize; //数学哈哈哈 } 3、队列判空

只要 front 和 rear的值相等就证明队列空了。

//3、队列判空 bool isEmpty(SqQueue Q) { return (Q.front == Q.rear); //空则true,否则false } 4、队列判满

队列满了就不能进行入队了,不然会溢出。(其实如果出队了的话,数组前面其实还是有位置的,所以会造成假溢出,这可以用循环队列进行处理。)

//4、队列判满 bool isFull(SqQueue Q) { return (Q.rear == MaxSize); //满则返回true,否则false } 5、入队

若队列未满,则将x加入,满了则不入队。

//5、入队 bool EnQueue(SqQueue &Q, ElemType x) { if (isFull(Q)) { //队列满的判断 cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3