Myqueue.h
<span style="font-family:Verdana;font-size:18px;">class Circle_Queue
{
public:
Circle_Queue(int queue_capacity);//构造函数
virtual ~Circle_Queue();//析构函数
bool isQueueEmpty()const;//判断队列是否为空
bool isQueueFull()const;//判断队列是否为满
void clear_queue();//清空队列
int queue_length()const;//得到队列长度
bool InQueue(int element);//入队
bool DeQueue();//出队
void queue_traverse();//遍历队列
private:
int m_queue_capacity;//队列的容量
int m_queue_length;//队列的实际长度
int * CircleQ;//为队列申请的数组
int q_head;//队列头,这里为方便起见只设置为一个整数
int q_tail;//队列尾
};</span>
Myqueue.cpp
<span style="font-family:Verdana;font-size:18px;">#include<iostream>
#include"Myqueue.h"
using namespace std;
Circle_Queue::Circle_Queue(int queue_capacity)//构造函数,为每一个私有成员赋初值
{
m_queue_capacity = queue_capacity;
clear_queue();
CircleQ=new int[queue_capacity];
}
Circle_Queue::~Circle_Queue()//析构函数
{
delete[]CircleQ;
CircleQ = NULL;
}
void Circle_Queue::clear_queue()//清空队列
{
q_head = q_tail = 0;
m_queue_length = 0;
}
bool Circle_Queue::isQueueEmpty()const//判断队列是否为空
{
return m_queue_length ==0? true : false;
}
int Circle_Queue::queue_length()const//得到队列长度
{
return m_queue_length;
}
bool Circle_Queue::isQueueFull()const//判断队列是否为满
{
return (m_queue_capacity == m_queue_length) ? true:false;
}
bool Circle_Queue::DeQueue()//出队
{
if (isQueueEmpty())
return false;
else
{
q_head = (q_head++)%m_queue_capacity;//对队列的容量取余,体现环形队列的特点
m_queue_length--;
return true;
}
}
bool Circle_Queue::InQueue(int element)//入队
{
if (isQueueFull())
{
cout << "the queue is full,failed to insert a num" << endl;
return false;
}
else
{
CircleQ[q_tail] = element;
q_tail = (q_tail++) % m_queue_capacity;//从队尾入队
m_queue_length++;
return true;
}
}
void Circle_Queue::queue_traverse()//遍历队列
{
if (isQueueEmpty()!=true)
{
for (int i = q_head; i < q_head + m_queue_length; i++)//注意q_head只是一个整数,i应该小于它与队长的和
{
cout << CircleQ[i%m_queue_capacity] <<" ";//仍是对容量取余
}
cout << endl;
}
}
</span>
main.cpp
<span style="font-family:Verdana;font-size:18px;">#include<iostream>
#include<stdlib.h>
#include"Myqueue.h"
using namespace std;
int main()
{
Circle_Queue *p = new Circle_Queue(4);//队列的容量为4
p->InQueue(10);//测试数据都是整数
p->InQueue(20);
p->InQueue(30);
p->InQueue(40);
p->InQueue(50);//这里插入第五个元素,超出了队列的容量,插入不成功
p->queue_traverse();
p->clear_queue();//测试清空队的函数
p->InQueue(50);
p->InQueue(30);
p->queue_traverse();
p->DeQueue();
p->queue_traverse();
delete p;
p = NULL;
system("pause");
return 0;
}</span>