循环队列是由数组实现的,主要目的是提高空间的使用效率。
完整代码在文章末尾。
主要使用的结构体:(front和rear都是指数组下标)
typedef struct queue
{
int * pBase;
int front; // 头指针
int rear; // 尾指针
} Queue, *pQueue;
队列主要函数:
void InitQueue (pQueue); // 初始化
void EnQueue (pQueue); // 入队
void DeQueue (pQueue); // 出队
bool FullQueue (pQueue); // 满
bool EmptyQueue (pQueue); // 空
void traverse (pQueue); // 遍历
1、初始化:
定义一段连续的空间,将队头和队尾指针都指向首位置
void InitQueue (pQueue Q)
{
Q->pBase = new int[MAXSIZE];
if (! Q->pBase)
exit (-1);
Q->front = Q->rear = 0;
}
2、入队(输入零的时候结束入队):
首先判断队列是否满,输入入队元素同时将队尾指针向后移动
void EnQueue (pQueue Q)
{
if (FullQueue (Q))
return;
cin >> Q->pBase[Q->rear];
while (Q->pBase[Q->rear] != 0 && !FullQueue (Q))
{
Q->rear = (Q->rear+1)%MAXSIZE;
cin >> Q->pBase[Q->rear];
}
3、出队:
首先判断队列是否为空,输出队头元素,将其空间初始化并移动队头指针
void DeQueue (pQueue Q)
{
if (EmptyQueue (Q))
return;
cout << "出队列元素为:" << Q->pBase[Q->front] << endl;;
Q->pBase[Q->front] = 0;
Q->front = (Q->front+1)%MAXSIZE;
}
4、是否为空、是否为满:
bool FullQueue (pQueue Q)
{
if (Q->front == (Q->rear+1)%MAXSIZE)
{
cout << "queue is full" << endl;
return true;
}
return false;
}
bool EmptyQueue (pQueue Q)
{
if (Q->front == Q->rear)
{
cout << "queue is empty" << endl;
return true;
}
return false;
}
5、完整代码
#include <iostream>
#include <stdbool.h>
#define MAXSIZE 6
using namespace std;
typedef struct queue
{
int * pBase;
int front; // 头指针
int rear; // 尾指针
} Queue, *pQueue;
void InitQueue (pQueue); // 初始化
void EnQueue (pQueue); // 入队
void DeQueue (pQueue); // 出队
bool FullQueue (pQueue); // 满
bool EmptyQueue (pQueue); // 空
void traverse (pQueue); // 遍历
int main ()
{
Queue Q;
InitQueue (&Q);
EnQueue (&Q);
traverse (&Q);
DeQueue (&Q);
traverse (&Q);
}
void InitQueue (pQueue Q)
{
Q->pBase = new int[MAXSIZE];
if (! Q->pBase)
exit (-1);
Q->front = Q->rear = 0;
}
void EnQueue (pQueue Q)
{
if (FullQueue (Q))
return;
cin >> Q->pBase[Q->rear];
while (Q->pBase[Q->rear] != 0 && !FullQueue (Q))
{
Q->rear = (Q->rear+1)%MAXSIZE;
cin >> Q->pBase[Q->rear];
}
}
void traverse (pQueue Q)
{
int i = Q->front;
while (i != Q->rear)
{
cout << Q->pBase[i] << " ";
i = (i+1)%MAXSIZE;
}
cout << endl;
}
bool FullQueue (pQueue Q)
{
if (Q->front == (Q->rear+1)%MAXSIZE)
{
cout << "queue is full" << endl;
return true;
}
return false;
}
bool EmptyQueue (pQueue Q)
{
if (Q->front == Q->rear)
{
cout << "queue is empty" << endl;
return true;
}
return false;
}
void DeQueue (pQueue Q)
{
if (EmptyQueue (Q))
return;
cout << "出队列元素为:" << Q->pBase[Q->front] << endl;;
Q->pBase[Q->front] = 0;
Q->front = (Q->front+1)%MAXSIZE;
}
初学此处,难免有不足之处,感谢批评指正,有需要的可以私信留言,谢谢