数据结构上机实验报告看.docx
- 文档编号:7801540
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:9
- 大小:77.22KB
数据结构上机实验报告看.docx
《数据结构上机实验报告看.docx》由会员分享,可在线阅读,更多相关《数据结构上机实验报告看.docx(9页珍藏版)》请在冰豆网上搜索。
数据结构上机实验报告看
数据结构上机实验报告(看病问题)
数据结构上机实验报告
题目:
一个病人看病模拟程序
学生姓名:
周瑞楠
学生学号:
3013216085
学院名称:
计算机学院
专业:
计算机科学与技术
时间:
2014.10.28
第一章,需求分析3
1.1原题描述3
1.2详细问题的解决方案3
1.2.1解决方案要求3
1.2.2各个环节功能要求4
第二章,概要设计5
2.1抽象数据类型5
2.2主要算法描述5
2.3算法分析6
第三章,详细设计7
3.1程序代码7
第四章,调试分析9
第五章,测试分析10
第六章,未来展望与思考11
第一章需求分析
1.1原题描述
请按照如下要求编写一个病人看病模拟程序
编写一个程序,反映病人到医院看病,排队看医生的情况。
在病人排队过程中,主要重复两件事:
(1)病人到达诊室,将病历本交给护士,拍到等待队列中候诊。
(2)护士从等待队列中取出下一位病人的病例,该病人进入诊室就诊。
1.2详细问题的解决方案
1.2.1问题分析
要求模拟病人等待就诊这一过程,程序采用菜单方式,其选项及功能说明如下:
(1)排队————输入排队病人的病历号,加入到病人排队队列中。
(2)就诊————病人排队队列中最前面的病人就诊,并将其从队列中删除。
(3)查看排队————从队首到队尾列出所有的排队病人的病历号。
(4)不再排队,余下依次就诊————从队首到队尾列出所有的排队病人的病历号,并退出运行。
(5)下班————退出运行。
1.2.2解决方案要求
测试数据及输出如下:
1:
排队2:
就诊3:
查看排队4:
不再排队,余下依次就诊5:
下班请选择:
1
>>输入病历号:
1
1:
排队2:
就诊3:
查看排队4:
不再排队,余下依次就诊5:
下班请选择:
1
>>输入病历号:
2
1:
排队2:
就诊3:
查看排队4:
不再排队,余下依次就诊5:
下班请选择:
1
>>输入病历号:
3
1:
排队2:
就诊3:
查看排队4:
不再排队,余下依次就诊5:
下班请选择:
2
>>病人1就诊
1:
排队2:
就诊3:
查看排队4:
不再排队,余下依次就诊5:
下班请选择:
3
>>排队病人:
23
1:
排队2:
就诊3:
查看排队4:
不再排队,余下依次就诊5:
下班请选择:
1
>>输入病历号:
4
1:
排队2:
就诊3:
查看排队4:
不再排队,余下依次就诊5:
下班请选择:
4
>>病人按以下顺序就诊:
234
1.2.3各个环节功能要求
表1-2.1环节功能
函数
功能
注意条件及限制规则
initQueue()
建立空队列
头指针尾指针建立后判断是否为NULL
EnQueue()
在队尾插入元素
判断节点储存分配是否失败
DeQueue()
删除对头元素并返回其值
释放被删除的节点删除队尾元素注意改变指针位置
ShowQueue()
输出队列元素
补充正文:
主函数里用switch来表明各种情况下应当调用的函数
第二章概要设计
2.1抽象数据类型
ADTdeletenode{
数据对象:
D={ai|ai∈ElemSet,i=1,2,…,m,m≥0
TermSet中的每个元素包含一个整数}
数据关系:
R1={
约定其中a1端为队列投,an端为队列尾
基本操作:
InitQueue(&Q);
操作结果:
建立空队列。
DestroyQueue(&Q)
初始条件:
队列Q已经存在。
操作结果:
销毁队列。
EnQueue(&Q,e)
初始条件:
队列Q已经存在。
操作结果:
在队尾插入元素e。
DeQueue(&Q)
初始条件:
队列Q已经存在。
操作结果:
删除队头元素并返回其值。
ShowQueue()(&Q)
初始条件:
队列Q已经存在。
操作结果:
输出队列元素。
}ADTJoseph
2.2主要算法描述
2.3算法分析
T(n)=O(a)(a为常数)
程序运行次数取决于操作者的输入
第三章详细设计
3.1程序代码
#include
usingnamespacestd;
typedefstructNode{
structNode*next;
intdata;
};
typedefstructLinkQueue{
Node*front;//队头指针
Node*rear;//队尾指针
};
Node*initQueue(LinkQueue&Q){
//构造空队列
Q.front=Q.rear=(Node*)malloc(sizeof(Node));
if(!
Q.front)
return0;
Q.front->next=NULL;
returnQ.front;
}
Node*EnQueue(LinkQueue&Q,inte){
//在队尾插入元素
Node*p=(Node*)malloc(sizeof(Node));
if(!
p)
return0;
p->data=e;
Q.rear->next=p;
p->next=NULL;
Q.rear=p;
returnQ.front;
}
intDeQueue(LinkQueue&Q){
//删除队头元素
if(Q.front==Q.rear)
return0;
Node*p=Q.front->next;
Q.front->next=p->next;
returnp->data;
if(Q.rear==p);
Q.front=Q.rear;
free(p);
}
voidShowQueue1(LinkQueue&Q){
//输出排队病人序号
Node*p;
p=Q.front->next;
while(p){
cout<
p=p->next;
}
cout< } intmain(){ intn; LinkQueues; Node*q=initQueue(s); cout<<"1: 排队2: 就诊3: 查看排队4: 不再排队,余下依次就诊5: 下班请选择: "; while(cin>>n){ inta; switch(n){ case1: {cout<<"输入病历号: "; cin>>a; q=EnQueue(s,a); break;} case2: {intb=DeQueue(s); cout<<"病人"< break;} case3: {cout<<"排队病人: "; ShowQueue1(s); break;} case4: {cout<<"病人按一下顺序就诊: "; ShowQueue1(s); return0;} case5: return0; } cout<<"1: 排队2: 就诊3: 查看排队4: 不再排队,余下依次就诊5: 下班请选择: "; } return0;} 第四章调试分析 Bug名称 输出与要求不一致 Bug描述 相同元素查找不完整 Bug原因 漏掉选择项 Bug解决方案 在while循环最后加上选择项 Bug总结 输出要与要求一致 第五章测试分析 测试编号 1 测试对象 EnQueue() 测试输入参数 12345 测试步骤 1.生成空队列2.调用initQueue()函数3.输出 测试预期结果 123456 测试输出结果 测试分析 预期结果与实际结果符合 第六章未来展望与思考 6.1思考与展望 该问题可以拓展到售票排队,各种排队问题上 6.2感想 通过这次实验作业让我坚定要好好学习数据结构,多看代码多练编程,一定要克服这些困难
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 上机 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)