循环队列的实现

来源:互联网 发布:网络电视看有线怎么调 编辑:程序博客网 时间:2024/05/29 15:12

一、实验目的

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;elsereturn 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;}

实验截图如下:



四、实验心得

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


原创粉丝点击