您的位置:首页 > 理论基础 > 数据结构算法

数据结构之循环队列(改)

2017-04-28 10:56 357 查看
声明:原版请看《循环队列的简单实现》

//
循环队列1.cpp:
定义控制台应用程序的入口点。

//作者Hecher.ShengTao.Tan

 

#include
"stdafx.h"

#include
<windows.h>

#define
MAX_QUEUE_SIZE6

 

typedef
intDataType;

typedef
structLoopQueue{

   
DataType data[MAX_QUEUE_SIZE];

   
intfront;

   
intrear;

   
intcount;

}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){

   
intTEMP;

   
boolBOOL;

   
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 =(enumCommond)TEMP;

       
switch(Cmd){

       
caseINITQ:

           
InitQueue(q);

           
printf("Is ok!\n");

           
break;

       
caseENQ:

           
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;

       
caseDEQ:

           
TEMP= DeQueue(q);

           
if(TEMP == 0)

               
printf("The Queue is NULL!\n");

           
else

               
printf("The number that been removed is:%d\n",
TEMP);

           
break;

       
caseGETF:

           
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);

   
return0;

}

 

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,
DataTypee){

   
if(IsFULL(q)){

       
returntrue;

   
}      

   
else{

       
q.data[q.rear]=
e;

       
q.rear= (q.rear
+ 1) % MAX_QUEUE_SIZE;

       
q.count++;

       
returnfalse;

   
}

}

 

DataType DeQueue(LoopQueue
&q){

   
inte;

   
if(IsEmpty(q)){       

       
return0;

   
}      

   
else{

       
e = q.data[q.front];

       
q.front= (q.front
+ 1) % MAX_QUEUE_SIZE;

       
q.count--;

       
returne;

   
}

}

 

DataType Getfront(LoopQueue
&q){

   
returnq.data[q.front];

}

 

DataType GetElements(LoopQueue
&q){

   
returnq.count;

}

 

 

 

 


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: