循环队列的实现

一、实验目的

1、   熟练掌栈和队列的结构特点,掌握栈和队列的顺序存储和链式存储结构和实现。

2、   学会使用栈和队列解决实际问题。

二、实验内容

确定结点的具体数据类型和问题规模:

建立一个循环队列,实现队列的入队和出队操作。

三、源代码

#CirQueue.h文件

const int QueueSize = 100;
template<class T>
class CirQueue
{
public:
	CirQueue();//构造函数,初始化空队列
	~CirQueue();//析构函数
	void EnQueue(T x);//入队操作,将元素X入队
	T DeQueue();//出队操作,将队伍元素出队
	T GetQueue();//取队头元素
	int Empty();//判断队列是否为空
	void PrintQueue();//从队头开始遍历队列
private:
	T data[QueueSize];
	int front, rear;
};

#CirQueue.cpp文件

#include"CirQueue.h"
template<class T>
CirQueue<T>::CirQueue()
{
	front = rear = QueueSize - 1;
}
template<class T>
CirQueue<T>::~CirQueue()
{
}
template<class T>
void CirQueue<T>::EnQueue(T x)
{
	if ((rear + 1) % QueueSize == front)
		throw "上溢";
	rear = (rear + 1) % QueueSize;
	data[rear] = x;
}
template<class T>
T CirQueue<T>::GetQueue()
{
	int i;
	if (rear == front)
		throw"下溢";
	i = (front + 1) % QueueSize;
	return data[i];
}
template<class T>
T CirQueue<T>::DeQueue()
{
	if (rear == front)
		throw"下溢";
	front = (front + 1) % QueueSize;
	return data[front];
}
template<class T>
int CirQueue<T>::Empty()
{
	if (front == rear)
		return 1;
	else
		return 0;
}
template<class T>
void CirQueue<T>::PrintQueue()
{
	int i;
	i = front;
	while (front != rear)
	{
		front = (front + 1) % QueueSize;
		cout << data[front] << "  ";
	}
	cout << endl;
	front = i;
}

#源.cpp文件

#include"CirQueue.cpp"
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
	CirQueue<int> c1;
	c1.EnQueue(1);
	c1.EnQueue(2);
	c1.EnQueue(3);
	cout << c1.GetQueue() << endl;//获取队头元素
	c1.PrintQueue();//遍历队列
	cout<<c1.DeQueue()<<endl;//队头出列
	cout << c1.Empty() << endl;//判断c1是否空
	c1.DeQueue();
	c1.DeQueue();
	cout << c1.Empty() << endl;//判断c1是否空
	system("pause");
	return 0;
}

实验截图如下:

四、实验心得

通过这次实验,发现自己的循环队列有了清晰的认识,也没遇到什么困难。

猜你喜欢

转载自blog.csdn.net/Hpsyche/article/details/78434275