队列:环形数组队列

一个基本的环形数组队列的实现

        可以将此文件放入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++基本数据类型,也可以是自定义的结构体或者类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值