数据结构与算法实验--栈(3)

        使用顺序(循环、非循环均可)队列模拟业务员到银行排队办理业务的情况,在这个过程中,主要重复两件事:(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;
}

运行结果:

数据结构与算法实验--栈(3)

上一篇:循环队列的实现


下一篇:对 n = 2,3,...,300, 判断那些 Mersenne 数 M_n=2^n-1 是素数 | matlab 源码