1 #include<iostream> 2 #include<cstdlib> 3 using namespace std; 4 #define OK 1 5 #define ERROR 0 6 #define OVERFLOW -2 7 #define MAXQSIZE 100 8 typedef int QElemType; 9 typedef int Status; 10 typedef struct 11 { 12 QElemType *base; 13 int front;//头指针 14 int rear;//尾指针 15 }SqQueue; 16 17 Status InitQueue(SqQueue &Q){ //构造一个空队列 18 Q.base=new QElemType[MAXQSIZE]; 19 if(!Q.base)exit(OVERFLOW); 20 Q.front=Q.rear=0; 21 return OK; 22 } 23 24 bool exist(SqQueue Q,int no){ //1.队列中是否有no病历号的病人 25 bool findno=false; 26 for(int i=Q.front;i!=Q.rear;i=(i+1)%MAXQSIZE){ 27 if(Q.base[i]==no){ 28 findno=true; 29 break; 30 } 31 } 32 return findno; 33 } 34 35 Status EnQueue(SqQueue &Q,int no){ //1.在队尾插入no病历号的病人 36 if((Q.rear+1)%MAXQSIZE==Q.front) //如果队满,则返回0 37 return ERROR; 38 else{ 39 Q.base[Q.rear]=no; //先插,后将尾指针后移一位 40 Q.rear=(Q.rear+1)%MAXQSIZE; 41 } 42 return OK; //插入成功 43 } 44 45 Status DeQueue(SqQueue &Q,int &no){ //2.就诊即出队,引用出队病号 46 if(Q.front==Q.rear)return ERROR; //如果队空,返回0 47 no=Q.base[Q.front]; 48 Q.front=(Q.front+1)%MAXQSIZE; 49 return OK; 50 } 51 52 void SeeDoctor() 53 { 54 int sel,no; 55 bool flag=true; //先标记为true 56 SqQueue Q; 57 InitQueue(Q); //构造队列 58 while(flag){ 59 cout<<"1:排队 2:就诊 3:查看排队 4.不再排队,余下依次就诊 5:下班 请选择:"; 60 cin>>sel; 61 switch(sel){ 62 case 1: //排队,查看是否用排队 63 cout<<" >>输入病历号:"; 64 while(true){ 65 cin>>no; 66 if(exist(Q,no)) 67 cout<<" >>输入的病历号重复,重新输入:"; 68 else 69 break; 70 } 71 if(EnQueue(Q,no)) 72 cout<<"排队成功"<<endl<<endl; 73 else 74 cout<<"当前排队人数已满,无法排队"<<endl<<endl; 75 break; 76 case 2: //就诊 77 if(DeQueue(Q,no)) 78 cout<<" >>病人"<<no<<"就诊."<<endl<<endl; 79 else 80 cout<<" >>没有排队的病人!"<<endl<<endl; 81 break; 82 case 3: //查看排队 83 if(Q.front==Q.rear) 84 cout<<" >>没有排列的病人!"<<endl<<endl; 85 else{ 86 cout<<" >>排队病人:"; 87 for(int i=Q.front;i!=Q.rear;i=(i+1)%MAXQSIZE) 88 cout<<Q.base[i]<<' '; 89 cout<<endl; 90 } 91 break; 92 case 4: //不再排队,余下依次就诊 93 if(Q.front==Q.rear) //队空 94 cout<<" >>没有排列的病人!"<<endl<<endl; 95 else{ //队不空 96 cout<<" >>病人按以下顺序就诊:"; 97 for(int i=Q.front;i!=Q.rear;i=(i+1)%MAXQSIZE) 98 cout<<Q.base[i]<<' '; 99 cout<<endl; 100 } 101 delete []Q.base; //释放Q.base指向的一整块内存 102 Q.base=NULL; //顺便赋值为NULL,防止出现野指针 103 flag=false; 104 break; 105 case 5: //下班 106 if(Q.front!=Q.rear) 107 cout<<" >>请排队的病人明天就医!"<<endl; 108 else 109 cout<<" >>没有排队的病人!"<<endl; 110 delete []Q.base; //释放Q.base指向的一整块内存 111 Q.base=NULL; //顺便赋值为NULL,防止野指针 112 flag=false; 113 break; 114 } 115 } 116 } 117 int main() 118 { 119 SeeDoctor(); 120 return 0; 121 }