#include "stdafx.h"
/*

队列是一种先进先出的线性表
队列的核心是对头部和尾部索引的操作

如上图所示,当对头索引移动到最前面6,队尾又不不再末尾0的位置,那么如果不循环利用此栈,队列就满了,为此采用(f+1%maxSize)的方式进行

当对头索引到6的位置 求余结果恰好为0 又回到对头了。这便实现了循环利用。(注意maxSize=6+1,这是c++数组特性决定了的)
*/
template <class T>
class BaseQueuq {
  //返回对头元素给X
  virtual bool front(T &x) = 0;
  //进队
  virtual bool enQueue(T &x) = 0;
  //出队
  virtual bool deQueue() = 0;
  //清空队列
  virtual void clear() = 0;
};
template <class T>
class Queue :public BaseQueuq<T> {
  int _indexF, _indexR,_maxSize;
  T *_queue;
public:
  Queue(int maxSize){
    _maxSize = maxSize;
    _queue = new T[_maxSize];
    _indexF = _indexR = 0;
  }
  bool front(T &x) {
    if (isEmpty()) {
      return false;
    }
    else {
      x = _queue[_indexF];
      return true;
    }
  }
  bool enQueue(T &x) {
i    f (isFull()) {
      //over flow
      return false;
    }
    else {
      _indexF=(_indexF+1)%_maxSize; //对头指针前进一
      _queue[_indexF] = x;
      return true;
    }
  }
  bool deQueue() {
    //ENTER
    if (isFull()) {
      //over flow
      return false;
    }
    else {
      _indexR = (_indexR+1) % _maxSize; //对尾指针向前移动1
      return true;
    }
  }
  void clear() {
    _indexF = _indexR = 0;
  }
  bool isFull() {
    if ((_indexR + 1) % _maxSize == _indexF) {//因为循环队列 要留一个空间就是要与空队列作为区分
      return true;
    }
    else {
      return false;
    }
  }
  bool isEmpty() {
    return _indexF == _indexR;
  }
};

int main()
{
int i = 3,j;
Queue<int> *test = new Queue<int>(5);
test->enQueue(i);
test->front(j);
printf("%d",j);
while (1);
return 0;
}

数据结构之队列C++版的更多相关文章

  1. 数据结构之队列java版

    //java由于泛型的擦除,用起来十分不方便 abstract class BaseQueue<T>{ abstract boolean enQueue(T x); abstract T ...

  2. 数据结构之队列(Python 版)

    数据结构之队列(Python 版) 队列的特点:先进先出(FIFO) 使用链表技术实现 使用单链表技术,在表首尾两端分别加入指针,就很容易实现队列类. 使用顺序表list实现 # 队列类的实现 cla ...

  3. 《Java程序设计与数据结构教程(第二版)》学习指导

    <Java程序设计与数据结构教程(第二版)>学习指导 欢迎关注"rocedu"微信公众号(手机上长按二维码) 做中教,做中学,实践中共同进步! 原文地址:http:// ...

  4. 队列——PowerShell版

    继续读啊哈磊<啊哈!算法>感悟系列——队列 地铁售票处排队,先来的人先到队首先买完先走,后来的人排在队尾等候后买完后走. 想买票,必须排在队尾:买完票,只能从队首离开. 这种先进先出(Fi ...

  5. C语言数据结构-循环队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作

    1.数据结构-循环队列的实现-C语言 #define MAXSIZE 100 //循环队列的存储结构 typedef struct { int* base; //基地址 int _front; //头 ...

  6. 数据结构之队列and栈总结分析

    一.前言: 数据结构中队列和栈也是常见的两个数据结构,队列和栈在实际使用场景上也是相辅相成的,下面简单总结一下,如有不对之处,多多指点交流,谢谢. 二.队列简介 队列顾名思义就是排队的意思,根据我们的 ...

  7. javascript数据结构之队列

    首先什么是队列? 排队买东西就是生活中队列的实际例子,在队伍中大家必须按照顺序来,不能插队,新来的人只能排在队伍的最后面.新加入的人相当于队列的后端加入的元素,队伍最前面买完东西的人离开队伍相当于是队 ...

  8. 北京大学公开课《数据结构与算法Python版》

    之前我分享过一个数据结构与算法的课程,很多小伙伴私信我问有没有Python版. 看了一些公开课后,今天特向大家推荐北京大学的这门课程:<数据结构与算法Python版>. 课程概述 很多同学 ...

  9. cb04a_c++_数据结构_STL_queue队列-一般用来做系统软件开发

    /*cb04a_c++_数据结构_STL_queue队列-一般用来做系统软件开发队列(只能两端数据)与堆栈(只能一端操作数据)都没有迭代器.,队列:FIFO先进先出自适应容器(容器适配器)栈适配器ST ...

随机推荐

  1. ZooKeeper入门(四) Zookeeper监视(Watches)

    1 简介 Zookeeper 所有的读操作——getData(), getChildren(), 和 exists() 都 可以设置监视(watch),并且这些watch都由写操作来触发:create ...

  2. Gym 101257G:24(尺取)

    http://codeforces.com/gym/101257/problem/GGym 101257G 题意:给出n个人,和一个数s,接下来给出每个人当前的分数和输掉的概率.当一个人输了之后就会掉 ...

  3. C++11/14笔记

    目录 语言层面 模板表达式中的空格 nullptr和std::nullptr_t 自动推导类型----auto 一致性初始化----Uniform Initialization 初始化列表(initi ...

  4. PLT与GOT

    0x01  什么是PLT和GOT 名称: PLT : 程序链接表(PLT,Procedure Link Table) GOT : 重局偏移表(GOT, Global Offset Table) 缘由: ...

  5. 基于SpringCloud的微服务架构实战案例项目,以一个简单的购物流程为示例

    QuickStart 基于SpringCloud体系实现,简单购物流程实现,满足基本功能:注册.登录.商品列表展示.商品详情展示.订单创建.详情查看.订单支付.库存更新等等. 每个业务服务采用独立的M ...

  6. python接口自动化(三十四)-封装与调用--函数和参数化(详解)

    简介 前面虽然实现了参数的关联,但是那种只是记流水账的完成功能,不便于维护,也没什么可读性,随着水平和技能的提升,再返回头去看前边写的代码,简直是惨不忍睹那样的代码是初级入门的代码水平都达不到.接下来 ...

  7. Excel催化剂开源第4波-ClickOnce部署要点之导入数字证书及创建EXCEL信任文件夹

    Excel催化刘插件使用Clickonce的部署方式发布插件,以满足用户使用插件过程中,需要对插件进行功能升级时,可以无痛地自动更新推送新版本.但Clickonce部署,对用户环境有较大的要求,前期首 ...

  8. Spring_AOP基于AspectJ的注解开发&JDBC的模板使用&事务管理(学习笔记3)

    一:AOP基于AspectJ的注解开发 1,简单的实例: 1)引入相应的jar包 ​ 2)在配置文件里引入相关约束 <beans xmlns="http://www.springfra ...

  9. Java EE.JSP.脚本

    脚本是<%与%>之间Java语言编写的代码块. 1.输出表达式 <%=表达式%>输出表达式的计算结果. 2.注释 1)输出到客户端的注释:<!-comment-> ...

  10. java练习---13

    public class Y { public static void main(String[] args) { // TODO Auto-generated method stub new Y() ...