#pragma once
typedef
struct Queue {
int * m_Queue;
int m_length;
int m_capacity;
}SqQueue;
class RoundQueue
{
SqQueue queue;
int m_head;
int m_tail;
public:
RoundQueue(int capacity);//InitQueue(&Q)创建队列
~RoundQueue();//DestroyQueue(&Q)销毁队列
void clearQueue();//清空列队
bool isEmpty() const;//判空队列
bool isFull() const;//判断为满
int QueueLength() const;//队列长度
bool EnQueue(int data);//新元素入队
bool DeQueue(int &data);//首元素出队
void QueueTraverse();//遍历列队
};
#include "pch.h"
#include "RoundQueue.h"
RoundQueue::RoundQueue(int capacity)
{
queue.m_capacity = capacity;
queue.m_Queue = new int[queue.m_capacity];
clearQueue();
}
RoundQueue::~RoundQueue()
{
delete[] queue.m_Queue;
queue.m_Queue = NULL;
}
void RoundQueue::clearQueue()
{
m_head = 0;
m_tail = 0;
queue.m_length = 0;
}
bool RoundQueue::isEmpty() const
{
return queue.m_length == 0;
}
bool RoundQueue::isFull() const
{
return queue.m_length == queue.m_capacity;
}
int RoundQueue::QueueLength() const
{
return queue.m_length;
}
bool RoundQueue::EnQueue(int data)
{
if (isFull() == true) {
return false;
}
queue.m_Queue[m_tail++] = data;
m_tail %= queue.m_capacity;
queue.m_length ++;
return true;
}
bool RoundQueue::DeQueue(int & data)
{
if (isEmpty() == true) {
return false;
}
data = queue.m_Queue[m_head ++];
m_head %= queue.m_capacity;
queue.m_length --;
return true;
}
void RoundQueue::QueueTraverse()
{
for (int i = m_head;i < queue.m_length + m_head ;i ++)
{
cout << queue.m_Queue[i % queue.m_capacity] << " " ;
}
cout << endl;
}
// 循环队列.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include "pch.h"
#include "RoundQueue.h"
int main(void)
{
RoundQueue * que = new RoundQueue(4);
que->EnQueue(10);
que->EnQueue(12);
que->EnQueue(14);
que->EnQueue(16);
que->QueueTraverse();
int number = 0;
que->DeQueue(number);
cout << "出队:" << number << endl;
que->EnQueue(18);
que->QueueTraverse();
return 0;
}