【数据结构】圆形结构——循环队列

——————————————现在就是正文———————————————

一.介绍

       与之前写过的数据结构不同:【数据结构】线性结构——队列

       循环队列在空间利用上比线性队列更有效率。当队列中指针队尾指向最后一位时,指针队头可重新指向队列第一位,实现首尾相接。

                                                       【数据结构】圆形结构——循环队列_第1张图片

二.队列的数据集和操作集

       对于抽象数据类型来说,每一种数据结构都有自己的数据集以及操作集,队列的数据集通常是一个装载数据的容器(如线性表的数组、链表和循环队列等)再加上记录队列头和队列尾的容器。在C++的库文件里面,有一个专门用作于队列的库文件,头文件名为: #include ,在主函数里使用时可以酱定义:std::queue<数据类型>  类名。当然,以下内容并未直接使用C++提供的库,而是本人自己写的一个简陋的队列代码,以下提供本人的数据集以及操作集:
      数据集采用vector,操作更为方便:

private:
	int Node_Front;
	int Node_Rear;
	int Node_Size;
	
private:
	std::vector Queue;

       操作集因人而异,本人的操作集如下:

template
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
CircularQueue::CircularQueue(int k)
{
	Node_Front = Node_Rear = -1;
	Node_Size = k;
	Queue.resize(k);
}

template
CircularQueue::~CircularQueue()
{

}

      3.2.压入数据

template
bool CircularQueue::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
bool CircularQueue::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
int CircularQueue::Front() //return Queue* Front
{
	return Node_Front;
}

template
int CircularQueue::Rear() //return Queue* Back
{
	return Node_Rear;
}

         3.5.队列是否为空/满

template
bool CircularQueue::isEmpty()
{
	if (Node_Front == -1)
	{
		printf("The Queue is Empty!\n");
		return true;
	}
	else
		return false;
}

template
bool CircularQueue::isFull()
{
	if (((Node_Rear + 1) % Node_Size) == Node_Front)
	{
		printf("The Queue is Full!\n");
		return true;
	}
	else
		return false;
}

         3.6.获取头指针所指的数据(后面的文章会用到)

template
type CircularQueue::Get_value()
{
	return Queue[Node_Front];
}

 

你可能感兴趣的:(数据结构,循环队列,C++,数据结构,线性结构)