[C++] 习题 2.15 实现简单环形队列
设计一个环形队列,用front和rear分别作为队头和队尾指针,另外用一个tag表示队列是空 ( 0 ) 还是不空 ( 1 ),这样就可以用front==rear作为队满的条件。要求设计队列的相关基本运算算法。
前置技能
环形队列
队列中进出时需要大量前移后移操作,除了链式队列,使用环形队列挪动下标也是一个不错的选择。队列的数据类型定义参考书第45页。

具体实现
原理很简单,实现的时候要注意判断tag在数入队、出队时,是否要转换真假值。另外清除队列时只需要把头尾相对,队列标空。
#include<iostream>
template<class T>
class queue{
private:
int maxsize;
int front;
int rear;
bool tag;
T *data;
public:
queue(int size){
maxsize = size;
front = 0;
rear = 0;
tag = false;
data = new T [size];
}
~queue(){
delete data;
}
void clear(){ //清除
rear = front;
tag = false;
}
bool enqueue (T tmp){ //入队
if(full()){
return false;
}
else{
if(empty()){
tag = true;
}
data[rear] = tmp;
rear = (rear+1) % maxsize;
return true;
}
}
bool dequeue (T &tmp){ //出队
if(empty()){
return false;
}
else{
tmp = data[front];
front = (front+1) % maxsize;
if(front == rear){
tag = false;
}
return true;
}
}
bool getfront (T &tmp){
if(empty()){
return false;
}
else {
tmp = data[front];
return true;
}
}
bool empty(){
if (rear == front && tag == false){
return true;
}
else{
return false;
}
}
bool full(){
if (rear == front && tag == true){
return true;
}
else{
return false;
}
}
};
[C++] 习题 2.15 实现简单环形队列的更多相关文章
- 【转】C#环形队列
概述 看了一个数据结构的教程,是用C++写的,可自己C#还是一个菜鸟,更别说C++了,但还是大胆尝试用C#将其中的环形队列的实现写出来,先上代码: 1 public class MyQueue< ...
- 高性能环形队列框架 Disruptor 核心概念
高性能环形队列框架 Disruptor Disruptor 是英国外汇交易公司LMAX开发的一款高吞吐低延迟内存队列框架,其充分考虑了底层CPU等运行模式来进行数据结构设计 (mechanical s ...
- Linux 内核:匠心独运之无锁环形队列kfifo
Linux 内核:匠心独运之无锁环形队列 Kernel version Linux 2.6.12 Author Toney Email vip_13031075266@163.com Da ...
- Atitit.提升软件稳定性---基于数据库实现的持久化 循环队列 环形队列
Atitit.提升软件稳定性---基于数据库实现的持久化 循环队列 环形队列 1. 前言::选型(马) 1 2. 实现java.util.queue接口 1 3. 当前指针的2个实现方式 1 1.1 ...
- C#实现环形队列
概述 看了一个数据结构的教程,是用C++写的,可自己C#还是一个菜鸟,更别说C++了,但还是大胆尝试用C#将其中的环形队列的实现写出来,先上代码: public class MyQueue<T& ...
- [LeetCode] Design Circular Queue 设计环形队列
Design your implementation of the circular queue. The circular queue is a linear data structure in w ...
- 1-关于单片机通信数据传输(中断发送,大小端,IEEE754浮点型格式,共用体,空闲中断,环形队列)
补充: 程序优化 为避免普通发送和中断发送造成冲突(造成死机,复位重启),printf修改为中断发送 写这篇文章的目的呢,如题目所言,我承认自己是一个程序猿.....应该说很多很多学单片机的对于... ...
- 【C/C++】缓冲区设计--环形队列
原文链接:http://blog.csdn.net/billow_zhang/article/details/4420789 在程序的两个模块间进行通讯的时候,缓冲区成为一个经常使用的机制. 如上图, ...
- 基于Python实现环形队列高效定时器
定时器Python实现代码 import time import redis import multiprocessing class Base: """ redis配置 ...
随机推荐
- 加入购物车的功能wepy
1.先有一个加入购物车的按钮 <view wx:if="{{(detaildata.boughtNum < detaildata.buy_limit) && de ...
- LArea插件选中城市,确定之后又很难再次选择城市?
加上fastclick.js这个js就能解决这个问题啦...... 详情:http://blog.csdn.net/zfy865628361/article/details/49512095
- angr工具的安装
一.安装 python2 或 python3: pip install angr 目前官方不再维护python2版本,所以python2装的版本偏低,且很可能没有后续更新. 如果你选择python2版 ...
- various system release [online]
1. 金丝雀发布 Canary 简单的金丝雀测试一般通过手工测试验证,复杂的金丝雀测试需要比较完善的监控基础设施配合,通过监控指标反馈,观察金丝雀的健康状况,作为后续发布或回退的依据. 金丝雀发布,一 ...
- python棱形继承(钻石继承)
class A(object): def func(self): print('A') class B(A): def func(self): super().func() print('B') cl ...
- html5中progress/meter元素
html5中progress/meter元素 一.总结 一句话总结: progress元素:用来建立一个进度条 meter元素的作用:用来建立一个度量条,用来表示度量衡的评定 <progress ...
- 英语语法 - 介词on/in/at与时间
介词滥用是中国学生的普遍缺点,主要是在语言学习的阶段没有人指正,形成有效的反馈,后面进入社会,就算别人发现你错了,也不会指正你,导致你一错再错. 看一篇教程,讲得不错.
- Spatial-Temporal Relation Networks for Multi-Object Tracking
Spatial-Temporal Relation Networks for Multi-Object Tracking 2019-05-21 11:07:49 Paper: https://arxi ...
- 多层If语句 和 表格驱动 的对比
网文提到表格驱动,总喜欢拿一层if做例子,然而这样未免也太简单. 下文是三层缩进的if和表驱动比较,大家可自行判断优劣. 业务是这样的,某景点分旺季票价和淡季票价,淡季票为旺季的一半,15岁以下孩子再 ...
- 000 基于Spring boot发送邮件
发送邮件的程序,使用QQ的服务器,经过测试,完全可行.可复现 一:准备工作 1.找到账号的授权码 这个是程序需要使用的. 在设置中查找. 2.新建项目的目录 二:完整的程序代码 1.pom.xml & ...