数据结构上机实验报告(看病问题)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构上机实验报告题目:一个病人看病模拟程序

学生姓名:***

学生学号:**********

学院名称:计算机学院

专业:计算机科学与技术

时间: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 >>排队病人:2 3

1:排队 2:就诊 3:查看排队 4:不再排队,余下依次就诊 5:下班请选择:1 >>输入病历号:4

1:排队 2:就诊 3:查看排队 4:不再排队,余下依次就诊 5:下班请选择:4 >>病人按以下顺序就诊:2 3 4

1.2.3 各个环节功能要求

表1-2.1 环节功能

函数功能注意条件及限制规则

initQueue()建立空队列头指针尾指针建立后判断

是否为NULL EnQueue() 在队尾插入元素判断节点储存分配是否失

败DeQueue() 删除对头元素并返回其值释放被删除的节点删除队

尾元素注意改变指针位置ShowQueue() 输出队列元素

补充正文:

主函数里用switch来表明各种情况下应当调用的函数

第二章概要设计

2.1 抽象数据类型

ADT deletenode{

数据对象:D={ai|ai∈ElemSet,i=1,2,…,m, m≥0

TermSet 中的每个元素包含一个整数}

数据关系:R1={| a i,a i-1∈D,且a i中的整数有序,i=2,3…,n} 约定其中a1端为队列投,an端为队列尾

基本操作:

InitQueue(&Q);

操作结果:建立空队列。

DestroyQueue(&Q)

初始条件:队列Q已经存在。

操作结果:销毁队列。

EnQueue(&Q,e)

初始条件:队列Q已经存在。

操作结果:在队尾插入元素e。

DeQueue(&Q)

初始条件:队列Q已经存在。

操作结果:删除队头元素并返回其值。

ShowQueue()(&Q)

初始条件:队列Q已经存在。

操作结果:输出队列元素。

}ADT Joseph

2.2主要算法描述

2.3算法分析

T(n)=O(a)(a为常数)

程序运行次数取决于操作者的输入

第三章详细设计3.1 程序代码

#include

using namespace std;

typedef struct Node{

struct Node *next;

int data;

};

typedef struct LinkQueue{

Node *front;//队头指针

Node *rear;//队尾指针

};

Node *initQueue(LinkQueue &Q){

//构造空队列

Q.front=Q.rear=(Node*)malloc(sizeof(Node));

if(!Q.front)

return 0;

Q.front->next=NULL;

return Q.front;

}

Node *EnQueue(LinkQueue &Q,int e){

//在队尾插入元素

Node *p=(Node *)malloc(sizeof(Node));

if(!p)

return 0;

p->data=e;

Q.rear->next=p;

p->next=NULL;

Q.rear=p;

return Q.front;

}

int DeQueue(LinkQueue &Q){

//删除队头元素

if(Q.front==Q.rear)

return 0;

Node *p=Q.front->next;

Q.front->next=p->next;

return p->data;

if(Q.rear==p);

相关文档
最新文档