循环队列和链队的表示和实现
文章目录
- 循环队列
- 存储结构
- 初始化
- 求队列长度
- 入队
- 出队
- 取队头元素
- 链队
- 存储结构
- 初始化
- 入队
- 出队
- 取队头元素
循环队列
在顺序分配的队列中,会出现假溢出的情况。
当我们将顺序队列变为一个环状的空间,我们就不会出现假溢出的情况,这种队列称为循环队列。
存储结构
typedef struct{QElemType *base;//存储空间的基地址 int front;//头指针 int rear;//尾指针
}SqQueue;
初始化
Status InitQueue(SqQueue &Q){Q.base=new QElemType[MAXQSIZE];//为队列分配一个大小为MAXSIZE的数组空间 if(!Q.base) exit(OVERFLOW);//储存分配失败 Q.front=Q.rear=0;//头指针和尾指针置位零,队列为空 return OK;
}
求队列长度
int QueueLength(SqQueue Q){return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
}
头指针尾指针只差就是队列长度,但是可能为负数所以需要加上MAXQSIZE结果求余即可。
入队
Status EnQueue(SqQueue &Q,QElemType e){if((Q.rear+1)%MAXQSIZE==Q.front)//尾指针+1后等于头指针说明队满return ERROR;Q.base[Q.rear]=e;//新元素插入队尾 Q.rear=(Q.rear+1)%MAXQSIZE;//队尾指针+1 return OK;
}
出队
Status DeQueue(SqQueu &Q,QElemType &e){if(Q.front==Q.rear) return ERROR;//队空 e=Q.base[Q.front];//保存队头元素 Q.front=(Q.front+1)%MAXQSIZE;//队头指针+1 return OK;
}
取队头元素
QElemType GetHead(SqQueue Q){if(Q.front!=Q.rear)//队列非空 return Q.base[Q.front];//返回队头元素的值,队头指针不变
}
链队
存储结构
typedef struct QNode{QElemType data;//结点数据域 struct QNode *next;//结点指针域
}QNode,*QueuePtr;
typedef struct{QueuePtr front;//队头指针 QueuePtr rear;//队尾指针
}LinkQueue;
初始化
Status InitQueue(LinkQueue &Q){Q.front=Q.rear=new QNode;//生成新结点作为头结点,队头和队尾指针指向此结点 Q.front->next=NULL;//头结点的指针域置空 return OK;
}
入队
Status EnQueue(LinkQueue &Q,QElemType e){QNode p;p=new QNode;//用p指针指向新的入队元素 p->data=e;//将p指针的数据域置为e p->next=NULL;//将新结点插入到队尾 Q.rear->next=p;Q.rear=p;//修改队尾指针 return OK;
}
出队
Status DeQueue(LinkQueue &Q,QElemType &e){QNode p;if(Q.front==Q.rear) return ERROR;//队非空 p=Q.front->next;//p指向队头元素 e=p->data;//e保存队头元素的值 Q.front->next=p->next;//修改头结点的指针域 if(Q.rear==p) Q.rear=Q.front;//最后一个元素被删除队尾指针指向头结点 delete p;//释放空间 return OK;
}
取队头元素
QElemType GetHead(LinkQueue Q){if(Q.front!=Q.rear)//队列非空 return Q.front->next->data;
}
参考自《数据结构》严蔚敏版,学习中…
循环队列和链队的表示和实现相关推荐
- 【数据结构】队列-顺序队列、循环队列、链队、双端队列
定义 队列是只允许在一端进行插入,而在另一端进行删除的线性表. 队头(Front):允许删除的一端,又称为队首. 队尾(Rear): 允许插入的一端. 先进入队列的元素必然先离开队列,即先进先出(Fi ...
- C语言 队列(循环队列和链队初始化进出队等基本操作)
目录 一.队列的定义 二.循环队列 1. 循环队列的储存结构 2.初始化 3.输出队列元素 4.入队 5.出队 6.取队头元素 7.求队列长度 8.源代码 三.链式队列 1.队列的链式存储结构表示 2 ...
- c语言循环队列入列算法,C语言——循环队列和链队列的基本运算
// 循环队列 #include #include "SeqQue.h" // 循环队列的基本运算 /* const int maxsize = 20; typedef struc ...
- 顺序队列,循环队列,链队列
队列 先看队列接口和结点类 1. 顺序队列 2. 循环队列 3. 链队列 先看队列接口和结点类 package com.lovely.queue;/** * 2020年4月26日下午2:42:44* ...
- 【数据结构与算法】循环队列和链队列的比较
前言 本文原本是一篇随感+笔记,被翻出来后就整理发了博客. 不曾想能上搜索头条,既如此,决定更新一下,加上必要的阐释,避免影响有需求的读者. (我这么理解大家,如果有需要的话,是不是可以考虑点个赞或者 ...
- 采用循环队列或链队列实现病人看病的模拟程序
采用循环队列或链队列实现病人看病的模拟程序 (1)定义队列的存储结构: (2)实现队列的初始化.判断是否为空.入队.出队等基本操作: (3)调用队列的基本操作实现病人看病模拟程序包括排队.就诊.查询. ...
- 数据结构与算法(3-2)队列(顺序队列、循环队列与链队列)
目录 一.顺序队列 1.存储结构 2.入队和出队 总代码 二.循环队列 总代码: 三.链队列 1.存储结构 2.入队和出队 总代码 一.顺序队列 队列特征:先进后出.后进后出. 1.存储结构 //队列 ...
- c语言队列(顺序队列,循环队列,链式队列)
顺序队列 1.初始化: front=-1; rear=-1; 2.判空条件 font=rear; 3.队列已满条件 rear=max-1; 代码: #include<stdio.h> #i ...
- Python数据结构与算法基础|第五期:代码实现——循环队列的链式存储结构
在上一次,我们通过取余等数学方法实现了顺序存储的循环队列.由于我们使用的是Python内置的列表类型作为底层,实际上我们的存储空间并不是首尾相连的.下面,我们使用链式存储结构来实现一个真正首尾相连的循 ...
- java先进先出 循环队列_java队列--先进先出(循环队列、链队列)
队列:只允许在一端进行插入操作(队尾),在另一端进行删除操作(队头). 队列的特征就是: 先进先出. 队列的思想及实现也同样非常简单.在生活中的各种常常都需要排队进行,键盘中缓存区.操作系统中的作业调 ...
最新文章
- NB-IoT,你真是太让我失望了
- 排序算法——快速排序算法
- RabbitMQ 交换器、持久化
- 我就改了一行代码,为什么就全超时了?
- python显示数据长度_Python使用s来检测数据的长度
- 第一阶段SCRUM冲刺 08
- FileIo 删除类中的private方法
- android 自定义水波纹点击效果Button
- ALGO-146算法训练 4-2找公倍数
- 基于Matlab的车辆型号识别系统
- Pygame详解(七):key 模块
- 数字IC设计工程师笔试面试经典100题
- 音频播放、录音、视频播放、拍照、视频录制
- Angular实战项目(1)
- hex文件、out文件、bin文件、map文件解析
- WIN7系统 64位出现 Net Framework 数据提供程序要求 Microsoft Data Access Components(MDAC)....
- MODISL1B数据FLAASH大气校正
- cmu的计算机专业项目有哪些,CMU的ECE「卡内基梅隆大学电气与计算机工程系」
- T36 调用ISBN商用API易源数据
- java.lang.SecurityException: ...does not have android.permission...
热门文章
- ES6新特性总结 一
- servlet详细理解
- Imc手机连环画PC阅读器
- LeetCode_151_python_翻转字符串里的单词
- QT、C++面试中的几个问题
- python采集人脸_python获取人脸的代码分享
- postgresql是如何求年龄的_负债累累如何度过难关?她依靠此法三年还清300多万债务!...
- kafka-client 版本兼容问题
- sncr脱硝技术流程图_SNCR脱硝技术
- python实现isprime函数、参数为整数、要有异常处理_Python期末复习题1