概述
一个基本的环形数组队列的实现
可以将此文件放入Stack.h文件中,方便以后需要时使用。
//环形数组队列
#include<iostream>
using namespace std;
template<class T>
class Queue
{
public:
Queue(int Size);
~Queue();
bool queue_empty();
bool queue_full();
bool enqueue(T element);
bool dequeue(T &element);//传入引用的目的是为了将出队的元素取出来
void traverse();
private:
T* data;
int head;//head指向队列头,指向队列第一个元素
int tail;//tail指向队列尾,指向队列最后一个元素的下一个位置
int length;//队列长度
int Size;//队列的内存空间
};
//构造函数,初始化队列
template<class T>
Queue<T>::Queue(int Size)
{
this->Size=Size;
head=0;
tail=0;
length=0;
data=new T[Size];
}
//析构函数,释放构造函数申请的内存空间,销毁队列
template<class T>
Queue<T>::~Queue()
{
delete []data;
}
//判空
template<class T>
bool Queue<T>::queue_empty()
{
return length==0?true:false;
}
//判满
template<class T>
bool Queue<T>::queue_full()
{
return length==Size?true:false;
}
//入队
template<class T>
bool Queue<T>::enqueue(T element)
{
if(queue_full()) return false;
data[tail]=element;
tail++;
tail%=Size;
length++;
return true;
}
//出队
template<class T>
bool Queue<T>::dequeue(T &element)
{
if(queue_empty()) return false;
head%=Size;
length--;
element=data[head];
head++;
return true;
}
//遍历
template<class T>
void Queue<T>::traverse()
{
for(int i=head;i<head+length;i++)
cout<<data[i%Size]<<" ";
cout<<endl;
}
这是一个指定存储空间的队列模板类,有队列最基本的操作,判空,判满,出队(出队可以取出队的元素,通过传引用的方式),入队,遍历。环形队列,意味着队列的存储空间首尾相连(是指定大小Size的空间可以实现逻辑上的首尾相连)。
出队入队返回bool是为了判断出入队是否成功,函数内部已经实现对数据的更改,不需要其他返回值。这个判断是为了可能在以后的操作中需要用到。
接下来就可以利用这个队列进行基本的操作。
#include<iostream>
#include"Stack.h"//上面编写的文件
using namespace std;
//如果利用模板类操作的队列元素是string需要#include<string>
int main()
{
int Size;
cin>>Size;
Queue<> myqueue(Size);//在<>内填入队列元素的数据类型
//进行操作
return 0;
}
在初始化队列时需要指定队列元素的数据类型,由于写的是模板类,队列的数据类型可以是int,char,string等C++基本数据类型,也可以是自定义的结构体或者类。
最后
以上就是飘逸星星为你收集整理的队列:环形数组队列一个基本的环形数组队列的实现的全部内容,希望文章能够帮你解决队列:环形数组队列一个基本的环形数组队列的实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复