原版请看《循环队列的简单实现》
//循环队列1.cpp:定义控制台应用程序的入口点。
//作者Hecher.ShengTao.Tan
#include"stdafx.h"
#include<windows.h>
#define MAX_QUEUE_SIZE 6
typedef int DataType;
typedef struct LoopQueue{
DataType data[MAX_QUEUE_SIZE];
int front;
int rear;
int count;
}LoopQueue;
enum Commond{
EXIT, INITQ, ENQ, DEQ, GETF, GETLEN
}Cmd;
void InitQueue(LoopQueue&q);
bool IsFULL(LoopQueue&q);
bool IsEmpty(LoopQueue&q);
bool EnQueue(LoopQueue&q, int e);
DataType DeQueue(LoopQueue &q);
DataType Getfront(LoopQueue &q);
DataType GetElements(LoopQueue &q);
void Operate(LoopQueue&q){
int TEMP;
bool BOOL;
printf("\t\t\tCmd List\n");
printf("\t\t\t------------\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE | FOREGROUND_GREEN);
printf("\t\t\t1-InitQueue\n");
printf("\t\t\t2-EnQueue\n");
printf("\t\t\t3-DeQueue\n");
printf("\t\t\t4-Getfront\n");
printf("\t\t\t5-GetElements\n");
printf("\t\t\t0-Exit\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE);
printf("\t\t\t------------\n");
while (!EXIT){
printf("\t\t\t\t\tEnter a number of the \"Cmd List\":");
scanf_s("%d", &TEMP);
Cmd = (enum Commond)TEMP;
switch (Cmd){
case INITQ:
InitQueue(q);
printf("Is ok!\n");
break;
case ENQ:
printf("Enter a number for the Queue:");
scanf_s("%d", &TEMP);
BOOL = EnQueue(q, TEMP);
if (BOOL){
printf("The Queue is full!\n");
printf("The Last numner is not insert!\n");
}
break;
case DEQ:
TEMP = DeQueue(q);
if (TEMP == 0)
printf("The Queue is NULL!\n");
else
printf("The number that been removed is:%d\n", TEMP);
break;
case GETF:
printf("%d\n", Getfront(q));
break;
caseGETLEN:
printf("%d\n", GetElements(q));
break;
caseEXIT:
return;
break;
default:
printf("Cmd is Error!\n");
break;
}
}
}
int main(){
LoopQueue q;
Operate(q);
return 0;
}
void InitQueue(LoopQueue&q){
q.front = q.rear = 0;
q.count = 0;
}
bool IsFULL(LoopQueue&q){
return((q.rear + 1) % MAX_QUEUE_SIZE == q.front);
}
bool IsEmpty(LoopQueue&q){
return(q.rear == q.front);
}
bool EnQueue(LoopQueue&q, DataType e){
if (IsFULL(q)){
return true;
}
else{
q.data[q.rear] = e;
q.rear = (q.rear + 1) % MAX_QUEUE_SIZE;
q.count++;
return false;
}
}
DataType DeQueue(LoopQueue &q){
int e;
if (IsEmpty(q)){
return 0;
}
else{
e = q.data[q.front];
q.front = (q.front + 1) % MAX_QUEUE_SIZE;
q.count--;
return e;
}
}
DataType Getfront(LoopQueue &q){
return q.data[q.front];
}
DataType GetElements(LoopQueue &q){
return q.count;
}