社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
与之前写过的数据结构不同:【数据结构】线性结构——队列
循环队列在空间利用上比线性队列更有效率。当队列中指针队尾指向最后一位时,指针队头可重新指向队列第一位,实现首尾相接。
对于抽象数据类型来说,每一种数据结构都有自己的数据集以及操作集,队列的数据集通常是一个装载数据的容器(如线性表的数组、链表和循环队列等)再加上记录队列头和队列尾的容器。在C++的库文件里面,有一个专门用作于队列的库文件,头文件名为: #include <queue>,在主函数里使用时可以酱定义:std::queue<数据类型> 类名。当然,以下内容并未直接使用C++提供的库,而是本人自己写的一个简陋的队列代码,以下提供本人的数据集以及操作集:
数据集采用vector,操作更为方便:
private:
int Node_Front;
int Node_Rear;
int Node_Size;
private:
std::vector<type> Queue;
操作集因人而异,本人的操作集如下:
template<class type>
class CircularQueue
{
public:
CircularQueue(int k);
~CircularQueue();
public:
bool enQueue(type value); //insert element
bool deQueue(); //delete element
int Front(); //return Queue* Front
int Rear(); //return Queue* Back
type Get_value(); //return Front value
bool isEmpty();
bool isFull();
}
3.1.数据集
就是简单地初始化一下
template<class type>
CircularQueue<type>::CircularQueue(int k)
{
Node_Front = Node_Rear = -1;
Node_Size = k;
Queue.resize(k);
}
template<class type>
CircularQueue<type>::~CircularQueue()
{
}
3.2.压入数据
template<class type>
bool CircularQueue<type>::enQueue(type value) //insert element
{
if (isFull())
return false;
if (isEmpty())
Node_Front = 0;
Node_Rear = (Node_Rear + 1) % Node_Size;
Queue[Node_Rear] = value;
return true;
}
3.3.删除数据
template<class type>
bool CircularQueue<type>::deQueue() //delete element
{
if (isEmpty())
return false;
if (isFull())
{
Node_Front = -1;
Node_Rear = -1;
return true;
}
Node_Front = (Node_Front + 1) % Node_Size;
return true;
}
3.4.返回头/尾指针所在位置
template<class type>
int CircularQueue<type>::Front() //return Queue* Front
{
return Node_Front;
}
template<class type>
int CircularQueue<type>::Rear() //return Queue* Back
{
return Node_Rear;
}
3.5.队列是否为空/满
template<class type>
bool CircularQueue<type>::isEmpty()
{
if (Node_Front == -1)
{
printf("The Queue is Empty!n");
return true;
}
else
return false;
}
template<class type>
bool CircularQueue<type>::isFull()
{
if (((Node_Rear + 1) % Node_Size) == Node_Front)
{
printf("The Queue is Full!n");
return true;
}
else
return false;
}
3.6.获取头指针所指的数据(后面的文章会用到)
template<class type>
type CircularQueue<type>::Get_value()
{
return Queue[Node_Front];
}
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!