数据结构实验题,求救!
(一)实验目的
通过本实验使学生加深理解队列的逻辑特征,掌握其存储结构的描述及实现方法,掌握队列初始化、入队、出队等相关基本操作的实现方法,从而达到能灵活运用队列解决应用问题的目的。
(二)实验内容
客户到银行办理业务,需要取号排队等候。客户分为VIP客户、理财客户、一般客户三种类型。不同类型客户,取得不同的排队序号凭证,进入不同序列排队等候。当服务窗口出现空闲时,按既定策略从三种类型客户中选取客户接受服务。
选取客户接受服务的策略如下:
(1)三种类型客户的服务优先顺序从高到低依次为:VIP客户、理财客户、一般客户;
(2)相同类型的客户采取先来先服务的原则;
(3)当一般客户连续5次未被选中时,下一次优先选取一般客户接受服务。
用C语言编写程序,模拟上述操作过程。
[解决办法]
- C/C++ code
#include<stdio.h>#include<stdlib.h>#define ElemType int//把这儿的元素类型换成你自己定义的数据结构,以下的内容算是一个队列的基本操作#define Q (*qe)struct quenode { ElemType data; struct quenode *next;}*p,*s,*h;struct quefr{ struct quenode *front,*rear;};main(){ struct quefr *que; int x,cord; void Outlin(struct quefr qq); void creat(struct quefr *qe); void insert(struct quefr *p,ElemType x); ElemType deletes(struct quefr *qe); do { printf("\n"); printf(" 主菜单 \n"); printf(" 1 建立链表队列 \n"); printf(" 2 入队一个元素 \n"); printf(" 3 出队一个元素 \n"); printf(" 4 结束程序运行 \n"); printf("-------------------------------\n"); printf("请输入您的选择(1, 2, 3, 4) "); scanf("%d",&cord); switch(cord) { case 1: { que=(struct quefr *)malloc(sizeof(struct quefr)); creat(que); Outlin(*que); }break; case 2: { printf("x=?"); scanf("%d",&x); insert(que,x); Outlin(*que); }break; case 3: { printf("x=%d\n",deletes(que)); Outlin(*que); }break; case 4: { exit (0); } } }while (cord<=4);}void Outlin(struct quefr qq){ p=qq.front->next; /*指向第一个数据元素节点 */ while(p!=NULL) { printf("data=%d\n",p->data); p=p->next; } printf("\n outend \n");}void insert(struct quefr *qe,int x)/*入队x值的节点*/{ s=(struct quenode *)malloc(sizeof(struct quenode)); s->data=x; s->next=NULL; Q.rear->next=s; Q.rear=s;}ElemType deletes(struct quefr *qe){ ElemType x; if(Q.front==Q.rear) { printf("队列为空。 \n"); x=0; } else { p=Q.front->next; Q.front->next=p->next; if(p->next==NULL) Q.rear=Q.front; x=p->data; free(p); } return(x);}void creat(struct quefr *qe){ int i,n,x; printf("n= "); scanf("%d",&n); h=(struct quenode*)malloc(sizeof(struct quenode)); h->next=NULL; Q.front=h; Q.rear=h; for(i=1;i<=n;i++) { scanf("%d",&x); insert(qe,x); }}
[解决办法]
三个不同类型的客户就建三个队列。这样就搞定了。在入队之前判断一下该进哪个队列就行了。其它的。稍一改就是你要的东西了。
[解决办法]
基本逻辑应该大致是这样的:
1. 建立三个队列(队列的实现可以自己看看书或者在网上搜),分别用来接受VIP客户、理财客户、一般客户
2. 当服务窗口空闲时
(1) 检查一般客户队列,如果在队头的客户的优先级是5(初始为0,等待一次就加1),那么优先处理,然后将其出队,否则转到第二步.
(2) 检查VIP客户队列。如果队列空,转到第三步,否则就处理排在队头的客户,处理完成后将其出队并将一般客户队列的队头客户(如果有的话)的优先级+1
(3) 检查理财客户队列.过程与处理VIP客户队列类似