算法与数据结构说明书Word下载.docx
- 文档编号:19427180
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:66
- 大小:500.52KB
算法与数据结构说明书Word下载.docx
《算法与数据结构说明书Word下载.docx》由会员分享,可在线阅读,更多相关《算法与数据结构说明书Word下载.docx(66页珍藏版)》请在冰豆网上搜索。
整型数组:
inta[4]={0,0,0,0};
//椅子
inttim[2]={9,00};
//时间(早上9点到下午6点)
各模块流程图及伪码算法:
函数Ya()是实现程序仿真的主题函数,通过case1、case2、case3选择语句模拟顾客的活动。
函数make(cl)是模拟顾客活动的具体函数实现,对花费时间ti,花费金钱money(),现在的时间tim[2]以及是否理发期间有顾客进来的判断、排队。
函数count()、count2(),是对总人数num1num2num3和排队人数b1b2b3的控制调节。
函数调用关系图:
调试分析
遇到的问题:
1.营业时间、理发时间的控制;
通过一个一维整形全局变量数组,随机产生数解决。
2.怎样判断是否有顾客指定正在理发的理发师理发;
通过给一个顾客理完后,提出提问是否有顾客指定正在理发的理发师理发?
来解决顾客排队的问题。
测试结果
执行结果通过产生随机数来进行,到下班时间后退出。
执行结果如下:
源程序:
#include<
iostream>
time.h>
usingnamespacestd;
intnum1=0;
//一级理发师理发的总人数
intnum2=0;
//二级理发师理发的总人数
intnum3=0;
//三级理发师理发的总人数
intb1=0;
//一级理发师排队的人数
intb2=0;
intb3=0;
椅子是否被占(0-空,1-被占)
node*front;
queue*q1=newqueue;
queue*q2=newqueue;
queue*q3=newqueue;
voidinit(queue*q,intk)//初始化
q->
front=newnode;
rear=q->
front;
front->
cl=k;
}
voidcount(intx)
if(x==1)
num1++;
elseif(x==2)
num2++;
elseif(x==3)
num3++;
voidcount1(intx)
b1++;
b2++;
b3++;
voidcount2(intx)
b1--;
b2--;
b3--;
intcount3(intx)
returnb1;
returnb2;
returnb3;
return0;
voidenterqueue(queue*q,intx)//入队
count(x);
node*s=newnode;
s->
cl=x;
rear->
link=s;
rear=s;
voidmoney(intx)
cout<
<
"
您好!
您的消费金额是40元!
endl;
if(x==2)
您的消费金额是30元!
if(x==3)
您的消费金额是20元!
voidmake(intx)
intti=30+rand()%30;
intn=0;
cout<
您所用时间为"
ti<
分钟"
money(x);
tim[1]=ti+tim[1];
if(tim[1]>
=60)
{
tim[0]++;
tim[1]=tim[1]-60;
}
现在时间是:
tim[0]<
时"
tim[1]<
分"
理发期间有几位顾客要该级别的理发师理发?
//cin>
>
s;
n;
n=rand()%2;
有"
n<
位顾客。
for(inti=0;
i<
i++)
count1(x);
先生(女士),不好意思,请您稍等一会."
您的编号为:
count3(x)<
enterqueue(q1,x);
a[x]=1;
if(tim[0]>
=18)
下班时间到!
voidya()
endl<
欢迎光临!
请问您需要理发师的级别(1--3)"
intcl=0;
cl=rand()%3+1;
需要级别为"
cl<
的理发师"
count1(cl);
count3(cl)<
switch(cl)
case1:
if((q1->
cl==cl)&
&
a[cl]==0)
{
请"
count3(cl)<
号坐"
号座."
a[cl]=1;
make(cl);
count(cl);
count2(cl);
a[cl]=0;
}
else
enterqueue(q1,cl);
break;
case2:
if(q2->
cl==cl&
count(cl);
enterqueue(q2,cl);
case3:
if(q3->
}
enterqueue(q3,cl);
voiddeal()//数据处理总结
intnum=num1+num2+num3;
floata=60.0*7/num;
intb=b1+b2+b3;
floatc=(float)b/3;
每位顾客平均逗留的时间是"
a<
顾客排队等候理发的队列长度平均值是"
c<
intb1=num1*40+num2*30+num3*20;
今天的营业额是"
b1<
元"
仍需完成服务的收尾工作时间为"
一级理发师的创收是"
num1*40<
二级理发师的创收是"
num2*30<
三级理发师的创收是"
num3*20<
intmain()
init(q1,1);
init(q2,2);
init(q3,3);
intflag=1;
while(flag)
ya();
if(tim[0]>
flag=0;
-----------------------------------------------"
今天的营业情况:
deal();
return1;
关键字:
病人就医管理模拟问题
前言
病人就医管理模拟问题程序中涉及到排队问题,所以解决的方法也主要是运用队列来解决,此程序运用链式队列来解决问题,病人排队、就诊,分别是队列的入队出队,查看排队就是遍历一次队列,输出排队的病人的病历号。
数据类型
链式队列:
structnode
stringdata;
node*link;
node*front;
node*rear;
函数的伪代码
init(queue*q)//初始化
申请一个node大小的空间,将front和rear初始化相等
enterqueue(queue*q,stringx)//进队
为q申请一个node大小的空间,将x进队,队尾rear指向q
deletequeue(queue*q,string*x)//出队
将队头front的
源代码:
string>
stringdata;
voidinit(queue*q)//初始化
voidenterqueue(queue*q,stringx)//进队
node*s;
s=newnode;
data=x;
x<
排队成功"
intdeletequeue(queue*q,string*x)//出队
if(q->
front==q->
rear)
没有人排队!
return0;
node*p;
p=q->
link;
link=p->
rear==p)
q->
*x=p->
data;
voidya(queue*p)//遍历
if(p->
front==p->
p->
data<
\t"
;
p->
front=p->
link;
-------------------菜单------------------"
(1)排队"
(2)就诊"
(3)查看排队"
(4)下班"
-----------------------------------------"
intx;
选择要实现功能的序号(1--4)"
cin>
x;
//srand(time(0));
//x=rand()%5+1;
//cout<
queue*a=newqueue;
strings="
000000"
init(a);
do{
switch(x)
请输入病历号:
cin>
enterqueue(a,s);
break;
inti;
i=deletequeue(a,&
s);
if(i==1)
s<
号就诊"
break;
现在排队的病人有:
ya(a);
case4:
下班!
选择要实现功能的序号(1--4,按0退出)"
if(x==0)
}while
(1);
链表
intdata;
主要函数伪代码
ya1(node*p,node*q)是长整形数字的输入,p和q作为头指针,用while语句,每次申请一个node的空间,将输入的数字x存到data中,头指针指向申请的新空间。
ya2(node*p,node*q)是两个数字的相加,num1num2分别是两个数字的长度,将两个数字同位的数字相加,存到新申请的空间中,长出来的数字直接存入申请的空间中,然后各位上大于9的数字减10,向前进一位。
ya3(node*p,node*q)是两个数字的相减,类似于两个数字的相加,小于减数的向后退一位。
voidya4(node*p,node*q)是两个数字的相乘,将每个链表的数字转换为一个数字,相乘得结果。
测试结果:
intdata;
voidjiemian()
请选择所要操作(1-5)"
1------输入"
2------相加"
3------相减"
4------相乘"
5------退出"
voidya1(node*p,node*q)//数字的输入
node*a;
a=p;
node*b;
b=q;
输入第一个数字(输入-1结束):
intx,y;
while(x!
=-1)
s=newnode;
s->
a->
a=s;
输入第二个数字(输入-1结束):
while(y!
y;
data=y;
b->
b=s;
第一个数字:
for(inti=1;
num1;
p=p->
第二个数字:
for(intj=1;
j<
num2;
j++)
q=q->
q->
voidya2(node*p,node*q)//相加
node*a,*s;
a=newnode;
a->
link=NULL;
p=p->
q=q->
=num2;
data=p->
data+q->
link=a->
for(intj=num2;
直接相加后为:
for(intk=1;
k<
k++)
a=a->
a->
voidya3(node*p,node*q)//相减
data-q->
直接相减后为:
doubleya44(node*p)
doublex=0.0;
x=x+p->
}
returnx;
voidya4(node*p,node*q)//相乘
doublex=ya44(p);
doubley=ya44(q);
***************"
y<
相乘得:
(double)x*y<
voidya5()//退出程序
退出程序!
exit
(1);
node*a=newnode;
node*b=newnode;
b->
jiemian();
switch(x)
case1:
ya1(a,b);
case2:
ya2(a,b);
case3:
ya3(a,b);
case4:
ya4(a,b);
case5:
ya5();
数据类型:
结构体:
structpoint
intx;
inty;
};
主要函数伪代码:
申请一个point空间,定义四个全局变量n
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 数据结构 说明书