首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

数据结构实验题,

2012-04-14 
数据结构实验题,求救!(一)实验目的通过本实验使学生加深理解队列的逻辑特征,掌握其存储结构的描述及实现方

数据结构实验题,求救!
(一)实验目的
通过本实验使学生加深理解队列的逻辑特征,掌握其存储结构的描述及实现方法,掌握队列初始化、入队、出队等相关基本操作的实现方法,从而达到能灵活运用队列解决应用问题的目的。
(二)实验内容
客户到银行办理业务,需要取号排队等候。客户分为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客户队列类似

热点排行