循环队列
front :指向队首元素的索引
rear:指向队尾元素的下一个索引
入队:
出队:
empty:
判断是否满:
#include<iostream>
using namespace std;
typedef struct Queue {
int* pBase;
int front;
int rear;
int n;
}QUEUE,*PQUEUE;
void init(PQUEUE,int);
bool empty_queue(PQUEUE);
bool full_queue(PQUEUE);
bool en_queue(PQUEUE, int);
bool out_queue(PQUEUE, int*);
void traverse_queue(PQUEUE);
int main() {
QUEUE Q;
init(&Q,6);
en_queue(&Q, 1);
en_queue(&Q, 2);
en_queue(&Q, 3);
en_queue(&Q, 4);
en_queue(&Q, 5);
en_queue(&Q, 6);
en_queue(&Q, 7);
traverse_queue(&Q);
cout << "\n";
int val;
while (!empty_queue(&Q)) {
if (out_queue(&Q, &val)) {
cout << "出队成功,队列出队的元素是:" << val << "\n";
}
else {
cout << "出队失败!\n";
}
}
if (out_queue(&Q, &val)) {
cout << "出队成功,队列出队的元素是:" << val << "\n";
}
else {
cout << "出队失败!\n";
}
return 0;
}
void init(PQUEUE pQ,int n)
{
pQ->n = n;
pQ->pBase = new int[pQ->n];
pQ->front = pQ->rear = 0;
}
bool empty_queue(PQUEUE pQ)
{
if (pQ->front == pQ->rear)
return true;
return false;
}
bool full_queue(PQUEUE pQ)
{
if ((pQ->rear + 1) % pQ->n == pQ->front) {
return true;
}
return false;
}
bool en_queue(PQUEUE pQ, int val)
{
if (full_queue(pQ)) {
return false;
}
else {
pQ->pBase[pQ->rear] = val;
pQ->rear = (pQ->rear + 1) % pQ->n;
}
}
bool out_queue(PQUEUE pQ, int*pVal)
{
if (empty_queue(pQ)) {
return false;
}
else {
*pVal = pQ->pBase[pQ->front];
pQ->front = (pQ->front + 1) % pQ->n;
return true;
}
}
void traverse_queue(PQUEUE pQ)
{
int i = pQ->front;
while (i != pQ->rear) {
cout << *(pQ->pBase + i) << " ";
i = (i + 1) % pQ->n;
}
}