一、实验目的
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;
}
实验截图如下:
四、实验心得
通过这次实验,发现自己的循环队列有了清晰的认识,也没遇到什么困难。