循环队列:

  1.循环队列中判断队空的方法是判断front==rear,队满的方法是判断front=(rear+1)%maxSize。(我曾经想过为什么不用一个length表示队长,当length==maxSize时队满)原因就是,在频繁的队列操作中,多出一个变量会大量的增加执行时间,所以不如浪费一个数组空间来得划算。

  2.用单链表表示的链式队列特别适合于数据元素变动较大的情形,而且不存在溢出的情况。

 template<class T>
class SeqQueue{
protected:
T *element;
int front,rear;
int maxSize;
public:
SeqQueue(int sz=){
front=rear=;
maxSize=sz;
element=new T[maxSize];
}
~SeqQueue(){
delete[] element;
}
bool EnQueue(const T& x){//入队
if(isFull()) return false;
element[rear]=x;
rear=(rear+)%maxSize;
return true;
}
bool DeQueue(T& x){//出队
if(isEmpty()) return false;
x=element[front];
front=(front+)%maxSize;
return true;
}
bool getFront(T& x){//获取队首元素
if(isEmpty()) return false;
x=element[front];
return true;
}
void makeEmpty(){//队列置空
front=rear=;
}
bool isEmpty()const{//判断队列是否为空
return (rear==front)?true:false;
}
bool isFull()const{//队列是否为满
return ((rear+)%maxSize==front)?true:false;
}
int getSize()const{
return (rear-front+maxSize)%maxSize;
}
};

测试代码如下:

 void menu(){
cout<<"1.入队"<<endl;
cout<<"2.获取队首元素"<<endl;
cout<<"3.出队"<<endl;
cout<<"4.队列置空"<<endl;
cout<<"5.获取队中元素数量"<<endl;
cout<<"6.退出"<<endl;
} void function(int num,SeqQueue<int> *sq){
switch(num){
int x;
case :
cin>>x;
sq->EnQueue(x);
break;
case :
sq->getFront(x);
cout<<x<<endl;
break;
case :
sq->DeQueue(x);
break;
case :
sq->makeEmpty();
break;
case :
x=sq->getSize();
cout<<x<<endl;
break;
default:
exit();
}
}
int main(int argc, char** argv) {
SeqQueue<int> *sq=new SeqQueue<int>;
int num;
while(true){
menu();
cin>>num;
function(num,sq);
}
delete sq;
return ;
}

之后是链式队列,实现类代码和测试代码如下:

 #include <iostream>
using namespace std;
template<class T>
struct LinkNode{
T data;
LinkNode<T> *link;
LinkNode(T& x,LinkNode<T> *l=NULL){
data=x;
link=l;
}
};
template<class T>
class LinkedQueue{
protected:
LinkNode<T> *front,*rear;
public:
LinkedQueue(){
front=rear=NULL;
}
~LinkedQueue(){
makeEmpty();
}
bool enQueue(T& x){
if(front==NULL)
front=rear=new LinkNode<T>(x);
else{
rear=rear->link=new LinkNode<T>(x);
}
return true;
}
bool deQueue(T& x){
if(isEmpty()) return false;
LinkNode<T> *p=front;
x=front->data;
front=front->link;
delete p;
return true;
}
bool getFront(T& x)const{
if(isEmpty()) return false;
x=front->data;
return true;
}
void makeEmpty(){
LinkNode<T> *p;
while(front!=NULL){
p=front;
front=front->link;
delete p;
}
}
bool isEmpty()const{
return (front==NULL)?true:false;
}
int getSize()const{
LinkNode<T> *p;
int count=;
p=front;
while(p!=NULL){
count++;
p=p->link;
}
return count;
}
};
void menu(){
cout<<"1.入队"<<endl;
cout<<"2.获取队首元素"<<endl;
cout<<"3.出队"<<endl;
cout<<"4.队列置空"<<endl;
cout<<"5.获取队中元素数量"<<endl;
cout<<"6.退出"<<endl;
} void function(int num,LinkedQueue<int> *lq){
switch(num){
int x;
case :
cin>>x;
lq->enQueue(x);
break;
case :
lq->getFront(x);
cout<<x<<endl;
break;
case :
lq->deQueue(x);
break;
case :
lq->makeEmpty();
break;
case :
x=lq->getSize();
cout<<x<<endl;
break;
default:
exit();
}
}
int main(int argc, char** argv) {
LinkedQueue<int> *lq=new LinkedQueue<int>;
int num;
while(true){
menu();
cin>>num;
function(num,lq);
}
delete lq;
return ;
}

循环队列和链式队列(C++实现)的更多相关文章

  1. 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列

    一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...

  2. 数据结构----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列

    一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...

  3. 队列(链式队列)----C语言

    链式队列----用链表实现,链式队列就是一个操作受限的单向链表,如果读者了解单向链表的建立过程,那理解链式队列就很容易了,先回顾一下单向链表的建立过程 (不熟悉单向链表的可以先看看另一片随笔,再回来看 ...

  4. 顺序队列与链式队列--C语言实现

    关于队列,因为我自己在平时使用不多,所以在这里直接将队列的两种存储方式放在一起,作为一篇随笔,这两份代码均可直接运行,亲测.注释写的应该也算比较详细了,就不过多的解释了 顺序队列 #include&l ...

  5. C ~ 链式队列与循环队列

          此处的链式与循环队列可以应用于BFS和树的层序遍历.下面是对其结构和基本操作的程序描述. 1.循环队列 解决循环队列的队空和队满的方法: [1].增加一个参数count,用来记录数组中当前 ...

  6. 队列(FIFO)—循环队列、队列的链式存储

    1 队列的定义 队列是只允许在一端(队尾)进行插入操作,而在另一端(队头)进行删除操作的线性表. 2 队列的特点 1)先进先出是队列最大的特点,是应用中非常常见的模型,例如排队: 2)队列也属于线性表 ...

  7. c++实验5 顺序/链式队列

    链式队列及循环队列 1.循环队列的实现(请采用模板类及模板函数实现) [实现提示] 同时可参见教材p65-p67页的ADT描述及算法实现及ppt)函数.类名称等可自定义,部分变量请加上学号后3位.也可 ...

  8. 基于python实现链式队列代码

    """ 链式存储-队列 linkqueue.py 代码实现 思路: 1.入队, 2.出队, 3.判断空满 """ # 异常类 class Q ...

  9. 数据结构算法C语言实现(十一)--- 3.4队列的链式表示和实现

    一.简介 FIFO. 二.头文件 //3_4_part1.h /** author:zhaoyu email:zhaoyu1995.com@gmail.com date:2016-6-9 note:r ...

随机推荐

  1. 周一04.3流程控制while循环

    #循环就是重复做某件事 1.条件循环:while,语法如下 while 条件: # 循环体 # 如果条件为真,那么循环体则执行,执行完毕后再次循环,重新判断条件... # 如果条件为假,那么循环体不执 ...

  2. 数论 C - Aladdin and the Flying Carpet

    It's said that Aladdin had to solve seven mysteries before getting the Magical Lamp which summons a ...

  3. python从开始到放弃想标题的day12

    上次有说道函数的返回值,但是不是所有的数据类型都有返回值,一些常用的比如str基本都有返回值,list基本都没有返回值,dict基本都有返回值,还有就是函数和函数之间的数据是互不影响的,哪怕是一个函数 ...

  4. Deep Reinforcement Learning for Dialogue Generation 论文阅读

    本文来自李纪为博士的论文 Deep Reinforcement Learning for Dialogue Generation. 1,概述 当前在闲聊机器人中的主要技术框架都是seq2seq模型.但 ...

  5. 多线程手写Future模式

    future模式 在进行耗时操作的时候,线程直接阻塞,我们需要优化这样的代码,让他再启动一个线程,不阻塞.可以执行下面的代码. 这个时候我们就用到了未来者模式 future设计类 只有一个方法 pub ...

  6. 面试7家,收到5个offer,我的Python就业经验总结 !

    *---------------------------------------人生处处有惊喜,背后却是无尽的辛酸苦辣.   Python找工作并不容易,老表面试了很多企业,总结了些宝贵经验! 一周转 ...

  7. Docker 核心技术之数据管理

    Docker 数据卷简介 为什么用数据卷 宿主机无法直接访问容器中的文件 容器中的文件没有持久化,导致容器删除后,文件数据也随之消失 容器之间也无法直接访问互相的文件 为解决这些问题,docker加入 ...

  8. 一次隐蔽的while死循环

    private int isStocksEnough(int goodsNum,int goodsID) { while(true) { sql = "select * from tb_go ...

  9. PHP细节,PHP手册中常见的一句话:该函数是二进制安全的

    以下内容转自 http://wuxinjie.github.io/php-02/ 在看PHP手册的时候,经常看到一句话”该函数是二进制安全的”. 二进制安全是什么呢? 他是如何实现的? 二进制安全是什 ...

  10. C# call webservice方法

    https://www.cnblogs.com/Fooo/p/5507153.html