使用顺序(循环、非循环均可)队列模拟业务员到银行排队办理业务的情况,在这个过程中,主要重复两件事:(1)取号排队:业务员到达银行网点,在取号机上选择办理业务排队,加入排队队列,并打印显示自己的编号和排第几;(2)办理业务:银行柜员从队列中取出排在最前面的人的编号,为之服务。要求能够随时取号排队,办理业务和查看等待办理业务的序号,以及下班时,没有办理业务的编号。
要求:设置一个菜单,完成(1)取号:编号增1,加入到排队的队列中;判断队列是否满;并打印显示自己的编号和排第几。 (2)办理;取出排在最前面的编号,让其办理业务,并将其从队列中删除。(3)查看;列出从队头到队尾的所有编号(4)下班:退出运行,输出队列中剩下的编号和已经办理完成的编号数量。
typedef struct { int items[100]; int front, rear; }SqQueue; int EnQueue(SqQueue* Q, int e) //入队列 { if ((Q->rear + 1) % 100 == Q->front) { printf("队列已满,无法办理业务!\n"); return 0; } Q->items[Q->rear] = e; Q->rear = (Q->rear + 1) % 100; return 0; } int DeQueue(SqQueue* Q, int &e) //出队列 { if (Q->front == Q->rear) { printf("无人等待办理业务!\n"); return 0; } e = Q->items[Q->front]; Q->front = (Q->front + 1) % 100; return 0; } int TraverseQueue(SqQueue Q) //遍历队列 { int pos; pos = Q.front; while ((pos + 1) % 100 <= Q.rear) { cout<<Q.items[pos]<<" "; pos++; } return 0; } int main() { SqQueue A; SqQueue* Q = &A; Q->front = 0; //初始化 Q->rear = 0; int e=1,num=0; int order=0; while (order!=4) { cout << "请输入指令(1:取号 2:办理 3:查看 4:下班)" << endl; cin >> order; switch (order) { case 1: EnQueue(Q, e); //取号即为入队列 cout << "编号:" << e << " 在您前面有"<<Q->rear-1<<"人等待" << endl; e++; break; case 2: DeQueue(Q, e); //办理即为出队列,先入先出 cout << "办理编号为:" << e << endl; num++; //办理一次,num+1 break; case 3: cout << "等待办理的编号为:" ; TraverseQueue(A); //遍历队列输出 cout << endl; break; case 4: cout << "还未办理的编号为:" ; TraverseQueue(A); cout << " "; cout <<"已办理完成:"<< num; //num为办理操作次数 break; } } return 0; }
运行结果: