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

声明:原版请看《循环队列的简单实现》


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


//作者Hecher.ShengTao.Tan


 


#include"stdafx.h"


#include<windows.h>


#defineMAX_QUEUE_SIZE6


 


typedefintDataType;


typedefstructLoopQueue{


   DataType data[MAX_QUEUE_SIZE];


   intfront;


   intrear;


   intcount;


}LoopQueue;


 


enumCommond{


   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;


}


 


 




 


 





猜你喜欢

转载自blog.csdn.net/ricardomtan/article/details/70889257