文档库 最新最全的文档下载
当前位置:文档库 › 数据结构:病人看病程序的模拟

数据结构:病人看病程序的模拟

数据结构:病人看病程序的模拟
数据结构:病人看病程序的模拟

实验二:病人看病模拟程序

一、实验目的

1、掌握单链队列存储方式的类型定义,掌握单链队列的基本运算的实现。

2、学会根据应用问题的需要选择合适的数据结构,掌握队列的先进先出运算规则及其在病

人看病模拟程序中的应用,理解队列在运算过程中状态的变化。

二、实验内容

编写一个程序,反映病人到医院看病排队看医生的情况。

三、需求分析

1、运行环境:Windows操作环境,Visual C++6.0

2、程序应该达到的功能:

在病人排队过程中,主要重复两件事:

(1)病人到达就诊室,将病历交给护士,排到等待队列中候诊。

(2)护士从等待队列中取出下一位病人的病历,该病人进入入诊室就诊。

要求模拟病人等待就诊这一过程。程序采用菜单方式,其选项及功能说民如下:(1)排队——输入排队病人的病历号,加入到病人排队队列中。

(2)就诊——病人排队队列中最前面的病人就诊,并将其从队列中删除。

(3)查看排队——从队首到队尾列出所有的排队病人的病历号。

(4)不再排队,余下依次就诊——从队首到队尾列出所有的排队病人的病历号,并退出运行。

(5)下班——退出运行。

四、概要设计

1、数据结构的选择

考虑到病人排队候诊的过程中具有先排队就诊的特诊,与队列的先进先出的特征相吻合,因此可以考虑采用队列线性表,其中,队列的存储结构有循环顺序队列和单链队列。考虑到循环顺序队列的插入,删除浪费空间和时间,故采用单链队列,而建立带头结点的单链队列比无头结点的单链队列更简化了插入和删除操作,因此采用带头结点的单链队列。

2、程序的总体结构

(1)建立名为“proj3_6”的项目文件,在该项目的管理下完成本程序开发。在该项目下建立名为“exp3_6.cpp”的源程序文件,文件中主要包括main()和SeeDoctor()两个函数,它们的关系如图1(b)所示。

图1(a)图1(b)

(2)程序的主要功能在SeeDoctot()函数中实现,main()函数起到调用SeeDoctor()函数的作用。

五、详细设计

1、数据结构的类型定义:

(1)链队结点的类型定义

typedef struct qnode

{

int data;

struct qnode *next;

} QNode;

(2)链队的整体结构定义

(3)链队的整体结构图示

2、main()函数:

void main()

{

seeDoctor();

}

3、SeeDoctor()函数:模拟病人看病的过程。病人排队看医生,所以要用到一个队列,这里

设计了一个带头结点的单链表作为队列。

六、测试数据及测试结果

●void SeeDoctor(){

int sel,flag=1,find,no; //flag的初始值为1,一旦下班->>退出系统,则将其置为0,从而结束

QuType *qu;

QNode *p;

qu=(QuType*)malloc(sizeof(QuType));

qu->front=qu->rear=(QNode*)malloc(sizeof(QNode));

qu->front->next=NULL;

while(flag==1)

{ printf("1:排队2:就诊3:查看排队4:不再排队,余下依次就诊5:下班请选择");

scanf("%d",&sel);

switch(sel)

{case 1:完成排队功能;

case 2:完成就诊功能;

case 3:完成查看排队功能;

case 4:完成不再排队,余下依次就诊功能;

case 5:完成下班请选择功能;

}

}

●各分支设计如下:

分支1:排队——输入排队病人的病历号,加入到病人排队队列中。

先检查将要排队病人的病历号是否已经在队列中,若在,则病历号重复,不能

完成排队功能,需重新输入;若不在,将其入队。

为此,设计一个do-while语句来判断病历号是否存在队列中,其循环条件:

find==1;首先输入病历号,若在,则find=1,继续循环;若不在,find=0,跳

出循环,将其入队。

检查将要入队病人的病历号是否存在的关键代码如下:

case 1: printf(" >>输入病历号");

do

{

scanf("%d",&no);

find=0;

p=qu->front;

while(p!=NULL&&!find)

{

if(p->data==no)

find=1;

else

p=p->next;

}

if(find)

printf(" >>输入的病历号重复,重新输入:");

}while(find==1); //直到输入一个不在队列中的病号才结束循环

p=(QNode*)malloc(sizeof(QNode)); //创建结点

p->data=no;p->next=NULL;

qu->rear->next=p; qu->rear=p; //将*p结点入队

break;

分支2:就诊——病人排队队列中最前面的病人就诊,并将其从队列中删除。

利用if语句来判断队列是否为空,若空,则输出“没有排队的病人!”;若不空,则输出“病人%d就诊”,最后删除病人%d。

病人就诊关键代码如下:

case 2: if (qu->front->next==NULL) /*队空*/

printf(" >>没有排队的病人!\n");

else /*队不空*/

{

p=qu->front->next;

printf(" >>病人%d就诊\n",p->data);

qu->front->next=p->next;

free(p);

}

break;

分支3:查看排队——从队首到队尾列出所有的排队病人的病历号。

先利用if判断队列是否为空,若空,则输出“没有排队的病人!”;若不空,则利用while循环来依次输出从队首到队尾所有排队病人的病历号。

查看排队关键代码如下:

case 3:if(qu->front->next==NULL)

printf(" >>没有排队的病人"); //队空

else { //队不空

p=qu->front->next;

printf(" >>排队病人");

while(p!=NULL)

{ printf("%d",p->data);

p=p->next;}

printf("\n");

}

break;

分支4:不再排队,余下依次就诊——从队首到队尾列出所有的排队病人的病历号,并退出运行。

先用if判断队列是否为空,若空,则输出“没有排队的病人!”,find=0,退出循环;若不空,则利用while循环来列出从队首到队尾的所有排队病人的病历号,find=0,退出循环。

不再排队,余下依次就诊关键代码如下:

case 4: if(qu->front->next==NULL) //队空

printf(" >>没有排队的病人");

else { //队不空

p=qu->front->next;

while(p!=NULL)

{

printf("%d",p->data);

p=p->next;

}

printf("\n");

}

flag=0;

break;

分支5:下班——退出循环。

若队不空,则输出“余下排队病人请明天就医!”,并将find=0,退出循环。下班的关键代码如下:

case 5: if(qu->front->next!=NULL) //队不空

printf(" >>请排队的病人明天就医!");

flag=0; /*退出*/

break;

测试结果:

七、使用说明

在Visual C++6.0环境下,按下述步骤操作即可:“文件”菜单/打开工作区/选择proj3_6.dsw”,确定/“编译”菜单/执行exp3_6.exe。

八、心得体会

九、源程序清单

/*文件名:exp3-6.cpp*/

#include

#include

typedef struct qnode

{

int data;

struct qnode *next;

}QNode; /*链队结点类型*/

typedef struct

{

QNode *front,*rear;

}QuType; /*链队类型*/

void seeDoctor(){

int sel,flag=1,find,no;

QuType *qu;

QNode *p;

qu=(QuType*)malloc(sizeof(QuType)); //创建队列

qu->front=qu->rear=(QNode*)malloc(sizeof(QNode));//创建头结点

qu->front->next=NULL; //队列为空

while(flag==1) /*循环执行*/

{ printf("1:排队 2:就诊 3:查看排队 4:不再排队,余下依次就诊 5:下班请选择"); scanf("%d",&sel);

switch(sel)

{ case 1: printf(" >>输入病历号");

do

{

scanf("%d",&no);

find=0;

p=qu->front;

while(p!=NULL&&!find)

{

if(p->data==no)

find=1;

else

p=p->next;

}

if(find)

printf(" >>输入的病历号重复,重新输入:");

}while(find==1);//直到输入一个不在队列中的病号才结束循环

p=(QNode*)malloc(sizeof(QNode)); //创建结点

p->data=no;p->next=NULL;

qu->rear->next=p;qu->rear=p; //将*p结点入队

break;

case 2: if (qu->front->next==NULL) /*队空*/

printf(" >>没有排队的病人!\n");

else /*队不空*/

{

p=qu->front->next;

printf(" >>病人%d就诊\n",p->data);

qu->front->next=p->next;

free(p);

}

break;

case 3:if(qu->front->next==NULL) //队空

printf(" >>没有排队的病人!\n");

else { //队不空

p=qu->front->next;

printf(" >>排队病人");

while(p!=NULL)

{ printf("%d",p->data);

p=p->next;}

printf("\n");

}

break;

case 4: if(qu->front->next==NULL) //队空

printf(" >>没有排队的病人!\n");

else { //队不空

p=qu->front->next;

printf(" >>病人按以下顺序就诊:");

while(p!=NULL)

{

printf("%d",p->data);

p=p->next;

}

printf("\n");

}

break;

case 5:if(qu->front->next!=NULL) //队不空

printf(" >>请排队的病人明天就医!\n");

flag=0; /*退出*/

break;

}

}

}

void main()

{

seeDoctor();

}

天津大学数据结构和程序设计考研真题

天津大学数据结构和程序设计考研真题-考研资料- 笔记讲义 许多学生在考研复习的时候,都会遇到重点不明确,不知道从何复习的情况。为此,天津考研网建议,考研复习中,专业的考研复习资料,是帮助考生能够快速掌握复习重点及方法必不可少的因素,然后就是真题和讲义,可以让同学了解历年考研的出题方向和大致范围。天津考研网推出了天津大学数据结构和程序设计的考研复习资料及真题解析班,以下为详细介绍: 天津大学数据结构和程序设计考研真题等资料由天津考研网签约的天津大学计算机科学与技术学院高分考研学生历时近一月所作,该考生在考研中取得了专业课129分的好成绩并在复试中更胜一筹,该资料包含该优秀本校考生的考研经验、考研试题解题思路分析、复试流程经验介绍以及针对官方指定参考书的重难要点并根据天津大学本科授课重点整理等,从漫漫初试长路到紧张复试亮剑为各位研友提供全程考研指导攻关。 特别说明:此科目06年以前科目名称为数据结构;自06年到08年科目名称改为计算机基础(包含数据结构、程序设计、计算机原理);自09年开始全国统考,科目名称为计算机学科专业基础综合;自2013年开始由学校自主命题,科目名称改为901数据结构与程序设计。 第一部分由天津考研网提供的核心复习资料: 天津大学数据结构和程序设计资料编者序言:本文的重点在于C++,数据结构的复习和复试基本情况介绍。C++、数据结构又分别从复习规划,复习用书,重点知识点结合历年考题这四个方面来展开的。复习规划大家务必看一下,然后根据自己的实际情况在制定自己的复习时间,因为内容很多,大多数同学都在考试之前复习不完,在心理因素上就落了一节。重点知识点一定要看了,这些知识点几乎每年都会有题了。另外我还给了历年试题的答案供大家参考。有的答案是自己做的答案,可能会有疏忽的地方。望大家提出宝贵的意见和建议。复试的东西现在了解一下即可,等到进复试了,还是有足够的时间看的。另外我还给了些自己复习心得。考完后感慨很多,回顾了这多半年来自己的成败得失。希望大家从一开始就沿着比较高效的方向前进,减少不必要时间的浪费。本资料格式为A4纸打印版,总量达到了130页

《数据结构》病人看病模拟程序

《数据结构》课程设计报告 课程名称:《数据结构》课程设计课程设计题目:病人看病模拟程序姓名: 院系:信息工程系 专业:计算机科学与技术班级: 学号: 指导老师:

目录 1课程设计的目的 (1) 2需求分析 (1) 3程序设计报告内容 (2) 3.1概要设计 (2) 3.2详细设计 (2) 3.3函数调用关系图 (4) 3.4程序清单 (5) 3.5运行结果 (5) 4总结 (7) 参考文献 (7) 附录 (8)

病人看病模拟程序 1.课程设计的目的 (1)熟练掌握队列的两种存储方式。 (2)掌握队列的基本操作及应用。 (3)利用队列实现病人就医管理模拟程序。 2.需求分析 设计一个病人就医管理系统,编写一个程序定义行医,反映病人到医院看病,排队看医生的情况,在病人排队过程中,主要发生两件事: (1)病人到达诊室,将病历本交给护士,排到等待队列中候诊。 (2)护士从等待队列中取出一位病人的病历,该病人进入诊室就诊。 要求程序采用菜单方式,其选项及功能说明如下: (1)排队------输入病人的病历号,加入到病人排队队列中 (2)就诊-------病人排队队列中最前面的病人就诊,并将其从队列中删除。(3)查看排队------从队首到队尾列出所有的排队病人的病历号。 (4)下班---------退出运行。 3.课程设计报告内容 3.1概要设计: (1).抽象数据类型图的定义如下: 此程序采用队列数据结构,存储结构为单链表,采用此种结构一方

面可以采用数据复杂程度,增加系统稳定性;另一方面,利用动态分配内存的方法,便于内存管理,充分利用内存空间。 int Menu_select() //菜单选择程序,要求用户输入一个正确的菜单选项。 如果不正确,则重复调用此子程序,知道输入的值是正确的 struct bingli*(creat()) //创建一个单链表。如果创建成功,则返回这个单链表的表头;如果创建不成功,则退出程序。 void ListInsert_rear(struct bingli*head) //创建一个单链表成功后,再次排队则时调用此子程序,作用是在单链表尾部(即对尾)插入一个病历号码。如果插入不成功,则退出程序。 struct bingli*(ListDelete(struct bingli*head)) //就诊程序。作用是输出就诊的病历号(即队首元素),并且删除队首元素、释放其所占空间。 void display(struct bingli*head) //显示队列所有元素 (2)本程序包含两个模块: a.主程序模块: void main() b.队列操作模块:实现所求的所有实际操作 各模块之间的调用关系如下:

程序设计与数据结构-2001

北京航空航天大学程序设计与数据结构试题 (2001年) 一、问答题(10’) 一般情况下,线性表可以采用哪几种存储结构?请分别叙述每一种存储结构的构造原理与特点。 二、(10’) 已知AOE网为G=(V,E),其中V={v1,v2,v3,v4,v5,v6,v7,v8,v9,v10},E={a1, a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14},其中: a1:(v1,v2)5a2:(v1,v3)6a3:(v2,v5)3a4:(v3,v4)3 a5:(v3,v5)6a6:(v4,v5)3a7:(v4,v7)1a8:(v4,v8)4 a9:(v5,v6)4a10:(v5,v7)2a11(v6,v10)4a12:(v7,v9)5 a13:(v8,v9)2a14:(v9,v10)2 注:顶点偶对右下角的数字表示边上的权值。 请按下述过程指出所有关键路径: ee[1:10]: le[1:10]: e[1:14]: l[1:14]: 其中,ee[i]与le[i]分别表示事件v i的最早发生时间与最晚发生时间;e[i]与l[i]分别表示活动a i的最早开始时间与最晚开始时间。 三、(10’) 欲建立一文献库,其正文(文献本身)存放在一个双向循环链表的各个链接点中。 1.为便于链接点的插入、删除操作,以及按题目、发表日期、发表者名称、主题词(假设每文最多给出三个主题词)进行检索,请设计该链表的链接点结构(给出链接点每个域的名称,并说明该域内存放什么信息。注:以下各小题设计链结点结构也这样要求)。画出整个链表结构的示意图。 2.设计一个三级索引结构,其中第三级索引称为题目索引,示按文献题目构造的稠密索引,通过该级索引并根据给定题目可得到每个文献的存放地址;该级索引按文献学科类分类存放。第二级索引称为中类索引,是题目索引的索引,指出同一中类的文献题目索引的存放位置(例如农林类、气象类……,古代史类,近代史类……)。第一级索引称为大类索引,指出同一大类(如:自然科学类、历史类……)的文献的中类索引的存放位置。请设计每一级索引的结点结构,并画出该索引的整体示意图。 3.在设计一种三级索引结构,其中第三级索引仍是题目索引(与2题所述相同),第二级索引把具有相同主题词的文献题目索引地址组织在一个单链表中。第一级索引称为主题词索引,用文献给出的主题词做关键字组成杂凑表,即该级索引为一个杂凑表,能够指出具有同一主题词的文献题目索引的索引链表的第一个链结点的存储位置。该杂凑表采用链地址法处理冲突。请设计每一级索引的结点结构,并画出该索引的整体示意图。 四、(10’) 已知非空线性链表由list 五、(5’+10’) 已知求两个正整数m与n的最大公因子的过程用自然语言可以表述为反复执行如下动作:

数据结构与程序

K 1373—2 20139730236 余玲 数据结构与程序构建第十三十四章笔记在阅读完数据结构与程序构建的第十三章后,了解了许多查找程序设计。同时也了解到查找技术在编程中作用很大,是重要的操作基础之一。 顺序查找就是线性表遍历查找法。从表的一端开始,向另一端逐个按给定值与关键码进行比较,若找到。查找成功。,并给出数据元素在表中的位置;若整个表检测完,未找到相同的关键码,则查找失败。给出失败信息。 从数据结构的逻辑关系层面考虑,顺序查找的方向是可以从左到右,也可以是从右到左。但是如果进一步考虑存储结构,该结论就不一定正确,比如单链表只能从左到右,如果决定使用链表,又要考虑从右到左的查找,显然必须启用双向链表,为了操作方便性而付出空间代价。 主要源码(顺序查找) Int seqsearching::ltorsearching(int*data,int length,int seekdata) { Int i=1; While(i<=length && data[i]!=seekdata) I++; If(i<=length) Return i; Else Return 0; } Int seqsearching::rtorsearching(int*data,int length,int seekdata)

{ Int i=length; While(i>0 && data[i]!=seekdata) I--; If(i>=1) Return i; Else Return 0; } Int seqsearching::gtorsearching(int*data,int length,int seekdata) { Data[0]=seekdata; Int i=length; While(data[i]!=seekdata) I--; Return i; } Int seqsearching::displaydata(int*data,int length) { Int i; Count<<“坐标” For(i=1;i<=length;i++) Count<

数据结构与程序设计C++描述(Kruse著)高等教育出版社_课后答案.

Programming Principles 1 1.2 THE GAME OF LIFE Exercises 1.2 Determine by hand calculation what will happen to each of the configurations shown in Figure 1.1 over the course of five generations. [Suggestion: Set up the Life configuration on a checkerboard. Use one color of checkers for living cells in the current generation and a second color to mark those that will be born or die in the next generation.] Answer (a) Figure remains stable. (b) (c) (d) Figure is stable. 1 2 Chapter 1 _ Programming Principles (e) (f) Figure repeats itself. (g) (h) (i) Figure repeats itself. (j) (k) (l) Figure repeats itself. Section 1.3 _ Programming Style 3 1.3 PROGRAMMING STYLE Exercises 1.3

E1. What classes would you define in implementing the following projects? What methods would your classes possess? (a) A program to store telephone numbers. Answer The program could use classes called Phone_book and Person. The methods for a Phone_book object would include look_up_name, add_person, remove_person. The methods for a Person object would include Look_up_number. Additional methods to initialize and print objects of both classes would also be useful. (b) A program to play Monopoly. Answer The program could use classes called Game_board, Property, Bank, Player, and Dice. In addition to initialization and printing methods for all classes, the following methods would be useful. The class Game_board needs methods next_card and operate_jail. The class Property needs methods change_owner, look_up_owner, rent, build, mortgage, and unmortgage. The class Bank needs methods pay and collect. The class Player needs methods roll_dice, move_location, buy_property and pay_rent. The class Dice needs a method roll. (c) A program to play tic-tac-toe. Answer The program could use classes called Game_board and Square. The classes need initialization and printing methods. The class Game_board would also need methods make_move and is_game_over. The class Square would need methods is_occupied, occupied_by, and occupy. (d) A program to model the build up of queues of cars waiting at a busy intersection with a traffic light. Answer The program could use classes Car, Traffic_light, and Queue. The classes would all need initialization and printing methods. The class Traffic_light would need additional methods change_status and status. The class Queue would need additional methods add_car and remove_car. E2. Rewrite the following class definition, which is supposed to model a deck of playing cards, so that it conforms to our principles of style. class a { // a deck of cards int X; thing Y1[52]; /* X is the location of the top card in the deck. Y1 lists the cards. */ public: a( ); void Shuffle( ); // Shuffle randomly arranges the cards. thing d( ); // deals the top card off the deck } ; Answer class Card_deck { Card deck[52]; int top_card; public: Card_deck( ); void Shuffle( ); Card deal( );

数据结构与程序的关系

5.3 数据结构与程序的关系 服务器程序在对定票/领票进行操作时需对数据库数据库数据结构,也就是数据表进行查询和修改:在定票/领票过程中都需要对数据库中的所有表,进行联合查询、修改。 物理数据结构主要用于各模块之间函数的信息传递。接口传递的信息将是以数据结构封装了的数据,以参数传递或返回值的形式在各模块间传输。出错信息将送入显示模块中,机票结构,帐单结构,送入打印准备模块中准备打印格式。 6.运行设计 6.1 运行模块的组合 客户机程序在有输入时启动接收数据模块,通过各模块之间的调用,读入并对输入进行格式化。在接收数据模块得到充分的数据时,将调用网络传输模块,将数据通过网络送到服务器,并等待接收服务器返回的信息。接收到返回信息后随即调用数据输出模块,对信息进行处理,产生相应的输出。 服务器程序的接收网络数据模块必须始终处于活动状态。接收到数据后,调用数据处理/查询模块对数据库进行访问,完成后调用网络发送模块,将信息返回客户机。 6.2 运行控制 运行控制将严格按照各模块间函数调用关系来实现。在各事务中心模块中,需对运行控制进行正确的判断,选择正确的运行控制路径。 在网络传方面,客户机在发送数据后,将等待服务器的确认收到信号,收到后,再次等待服务器发送回答数据,然后对数据进行确认。服务器在接到数据后发送确认信号,在对数据处理、访问数据库后,将返回信息送回客户机,并等待确认。 6.3 运行时间 在软体的需求分析中,对运行时间的要求为必须对作出的操作有较快的反应。网络硬件对运行时间有最大的影响,当网络负载量大时,对操作反应将受到很大的影响。所以将采用高速ATM 网络,实现客户机与服务器之间的连接,以减少网络传输上的开销。其次是服务器的性能,这将影响对数据库访问时间即操作时间的长短,影响加大客户机操作的等待时间,所以必须使用高性能的服务器,建议使用 Pentium III 处理器。硬件对本系统的速度影响将会大于软件的影响。 7.出错处理设计 7.1 出错输出信息 程序在运行时主要会出现两种错误:1、由于输入信息,或无法满足要求时产生的错误,称为软错误。2、

数据结构病人看病程序的模拟

实验二:病人看病模拟程序 一、实验目的 1、掌握单链队列存储方式的类型定义,掌握单链队列的基本运算的实现。 2、学会根据应用问题的需要选择合适的数据结构,掌握队列的先进先出运算规则及其在病 人看病模拟程序中的应用,理解队列在运算过程中状态的变化。 二、实验内容 编写一个程序,反映病人到医院看病排队看医生的情况。 三、需求分析 1、运行环境:Windows操作环境,Visual C++6.0 2、程序应该达到的功能: 在病人排队过程中,主要重复两件事: (1)病人到达就诊室,将病历交给护士,排到等待队列中候诊。 (2)护士从等待队列中取出下一位病人的病历,该病人进入入诊室就诊。 要求模拟病人等待就诊这一过程。程序采用菜单方式,其选项及功能说民如下:(1)排队——输入排队病人的病历号,加入到病人排队队列中。 (2)就诊——病人排队队列中最前面的病人就诊,并将其从队列中删除。 (3)查看排队——从队首到队尾列出所有的排队病人的病历号。 (4)不再排队,余下依次就诊——从队首到队尾列出所有的排队病人的病历号,并退出运行。 (5)下班——退出运行。 四、概要设计 1、数据结构的选择 考虑到病人排队候诊的过程中具有先排队就诊的特诊,与队列的先进先出的特征相吻合,因此可以考虑采用队列线性表,其中,队列的存储结构有循环顺序队列和单链队列。考虑到循环顺序队列的插入,删除浪费空间和时间,故采用单链队列,而建立带头结点的单链队列比无头结点的单链队列更简化了插入和删除操作,因此采用带头结点的单链队列。 2、程序的总体结构 (1)建立名为“proj3_6”的项目文件,在该项目的管理下完成本程序开发。在该项目下建立名为“exp3_6.cpp”的源程序文件,文件中主要包括main()和SeeDoctor()两个函数,它们的关系如图1(b)所示。

数据结构课程设计_病人看病模拟程序文件

工程应用技术学院 课程设计 (数据结构) 班级: 程序设计人员: 报告制作人员: 答辩人员: 指导教师: 2015年3月1日

课程设计任务书及成绩评定 课题名称病人看病模拟程序 Ⅰ、题目的目的和要求: 1、设计目的 巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。 (1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。 (2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。 2、设计题目要求: 编写一个程序,采用链式队列模拟病人到医院就诊的过程,设计一个病人就医管理系统。Ⅱ、设计进度及完成情况

Ⅲ、主要参考文献及资料 [1] 严蔚敏数据结构(C语言版)清华大学 2007 [2] 严蔚敏数据结构题集(C语言版)清华大学 1999 [3] 谭浩强 C程序设计(第四版)清华大学 [4] 与所用编程环境相配套的C语言资料 Ⅳ、成绩评定: 成绩:(教师填写) 指导老师:(签字) 2015 年 3 月 1 日

目录 第一章概述 (1) 第二章系统分析 (2) 第三章概要设计 (3) 第四章详细设计 (4) 第五章运行与测试 (5) 第六章总结与心得 (6) 参考文献 (7)

第一章概述 课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。《数据结构》是一门重要的专业基础课,是计算机理论和应用的核心基础课程。 数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。 在这次的课程设计中我们选择的题目是病人看病模拟程序,我们将采用链式队列来模拟病人看病的程序。传统的病人看病就诊的基本业务活动有挂号、排队、就诊。通常病人去医院排队看医生主要重复两件事情: (1)病人到达诊室,将病历本交给护士,排队等待队列中候诊。 (2)护士从等待队列中取出下一位病人病历,该病人进入诊室就诊。 当你拿上自己的病历后到达相应的诊室门口进行排队,等待护士叫到你相对应的号数你才能进入就诊室就诊,这样一来排队就诊的效率相对就较低,也浪费了医院的劳动力,但是现在这些业务可以借助计算机系统完成,我们可以通过计算机设计相关的程序来处理相关的排队就诊问题,这样效率可以得到提高,也可以减少劳动力的浪费,让我们负责排队就诊的护士可以去帮助其他更多的人,这就使得病人看病的相关排队就诊等相关手续变简、效率变高、劳动力得到充分的释放,既方便病人,又方便医生和护士。

C语言程序设计和数据结构

湖南师范大学硕士研究生入学考试自命题考试大纲 考试科目代码:[967] 考试科目名称:C语言程序设计和数据结构 一、试卷结构 1) 试卷成绩及考试时间 本试卷满分为150分,考试时间为180分钟。 2)答题方式:闭卷、笔试 3)试卷内容结构 C语言程序设计部分 80% 数据结构部分 20% 4)题型结构 a: 单项选择题,共40分 b: 程序填空题,共30分 c: 程序阅读题,共25分 d: 编程题,共45分 e: 分析题,共10分 二、考试内容与考试要求 (一)C语言程序设计部分 考试内容 1、基本知识 (1)C语言的数据类型 (2)C语言中各种类型常量的表示法 (3)各类数值型数据间的混合运算 (4)C运算符 (5)关系表达式及运算,逻辑表达式及运算

2、顺序、选择与循环结构 (1)赋值语句,格式输入与输出 (2)if语句,switch语句 (3)goto、while、do-while、for、break、continue语句3、数组 (1)一维数组的定义和引用 (2)二维数组的定义和引用 (3)字符数组的定义和引用,字符串及其处理函数 4、函数 (1)函数定义与调用 (2)局部变量和全局变量 (3)变量的存储类型 (4)内部函数与外部函数 5、宏定义 (1)带参数的宏定义 (2)包含文件的处理 6、指针 (1)地址和指针的概念 (2)数组的指针和指向数组的指针变量 (3)字符串的指针和指向字符串的指针变量 (4)函数的指针和指向函数的指针变量 (5)指针数组和指向指针的数组 7、结构体和共同体 (1)结构体变量的定义和使用方法 (2)指向结构体类型变量的指针 (3)用指针处理链表 (4)共同体变量的定义和使用方法

数据结构课程设计——病人看病模拟程序汇编

贵州工程应用技术学院课程设计 (数据结构) 班级: 程序设计人员: 报告制作人员: 答辩人员: 指导教师: 2015年3月1日

课程设计任务书及成绩评定 Ⅰ、题目的目的和要求: 1、设计目的 巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。 (1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。 (2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。 2、设计题目要求: 编写一个程序,采用链式队列模拟病人到医院就诊的过程,设计一个病人就医管理系统。Ⅱ、设计进度及完成情况 日期内容 第1周1、课程设计分组分工、选题 2、查阅参考文献 3、确定设计方案和制定进度计划 第2周第一部分概述 第二部分系统分析 第3、4周 第三部分概要设计 第5、6周 第四部分详细设计 第7周 第五部分运行与测试 第8周 第六部分撰写并整理课程设计报告第9周课程设计答辩 课题名称病人看病模拟程序

Ⅲ、主要参考文献及资料 [1] 严蔚敏数据结构(C语言版)清华大学出版社 2007 [2] 严蔚敏数据结构题集(C语言版)清华大学出版社 1999 [3] 谭浩强 C程序设计(第四版)清华大学出版社 [4] 与所用编程环境相配套的C语言资料 Ⅳ、成绩评定: 成绩:(教师填写) 指导老师:(签字) 2015 年 3 月 1 日

目录 第一章概述 (1) 第二章系统分析 (2) 第三章概要设计 (3) 第四章详细设计 (4) 第五章运行与测试 (5) 第六章总结与心得 (6) 参考文献 (7)

数据结构与C语言程序设计

《数据结构与C语言程序设计》复习大纲 《数据结构与C语言程序设计》包括“数据结构”与“C语言程序设计”两门课程的内容,各占比例50%。 《数据结构》部分 指定参考书: 《数据结构教程(第二版)》唐发根编著,北京航空航天大学出版社,2005 一、概述 1.简要了解数据的逻辑结构与存储结构的基本概念; 2.了解算法的定义、算法的五个基本性质以及算法分析最基本的概念,包括算法分析的前提、目的。 二、线性表 1.了解线性关系、线性表的定义,线性表的基本操作; 2.线性表的顺序存储结构与链式存储结构(包括单链表、循环链表和双向链表)的构造原理; 3.掌握在以上两种存储结构的基础上对线性表实施的基本操作,重点包括顺序表的插入和删除、链表的建立、插入和删除、检索等操作对应的过程和算法的设计。 三、堆栈与队列 1.了解堆栈与队列(不含循环队列)的基本概念、基本操作; 2.掌握堆栈与队列的顺序存储结构与链式存储结构的构造原理; 3.掌握在不同存储结构的基础上对堆栈与队列实施插入与删除等基本操作过程。

四、树与二叉树 1.了解树型结构的基本概念,基本特征、名词术语; 2.了解完全二叉树、满二叉树的概念;二叉树的基本性质(至少要记住结论); 3.了解二叉树的顺序存储结构与二叉链表存储结构的构造原理及特点,重点是二叉链表存储结构; 4.掌握二叉树的前序遍历、中序遍历、后序遍历和按层次遍历算法(非递归算法)以及利用遍历解决有关二叉树的其它操作; 5.掌握二叉排序树的基本概念、建立(插入)和查找。 五、图 1.了解图结构的基本概念、基本名词术语; 2.掌握图的邻接矩阵存储方法和邻接表存储方法的基本构造原理与特点; 3.图的深度优先搜索和广度优先搜索的基本过程,遍历的基本作用; 4.最小生成树的求解过程,拓扑排序及其目的。 六、文件及查找 1.掌握顺序查找法、折半查找法的查找过程,了解折半查找方法的基本要求; 2.了解散列(Hash)文件的基本特点,散列函数和散列冲突的概念,处理散列冲突的方法。 七、内排序 了解插入排序法、选择排序法、泡排序法、快速排序法以及堆积排序(大顶堆积)法等排序方法的排序原理、规律和特点。 《C语言程序设计》部分 指定参考书: 《C程序设计》(第三版)谭浩强著,清华大学出版社, 2005.7

814程序设计与数据结构考试大纲

814程序设计与数据结构考试大纲 085211计算机技术专业 一、考试目的 本考试是全日制计算机技术专业学位研究生的入学资格考试之专业基础课,各语种考生统一用汉语答题。各招生院校根据考生参加本考试的成绩和其他三门考试的成绩总分来选择参加第二轮,即复试的考生。 二、考试的性质与范围 本考试是测试考生计算机科学基础知识的水平考试。考试范围包括本大纲规定的C++语言程序设计和数据结构。 三、考试基本要求 1. 具备扎实的C++语言程序设计基本功。 2. 具备设计数据结构和算法求解问题的基本能力。 四、考试形式 本考试采取客观试题与主观试题相结合,单项技能测试与综合技能测试相结合的方法,强调考生设计数据结构和算法并编程实现来求解问题的能力。试题分类参见“考试内容一览表”。 五、考试内容 本考试包括两个部分:C++程序设计、数据结构。总分150分。 I. C++程序设计 1. 考试要求 该部分要求考生对C++语言基本特性、面向对象程序设计方法和Visual C++编译器相关特性有很好的了解。 2. 题型 选择题、读程序写出Visual C++下的执行结果、程序填空,共75分。 II. 数据结构 1. 考试要求 该部分要求考生掌握线性表(及其扩展:栈和FIFO队列)、树(包括基本的二叉树和堆、搜索树等特殊树结构)、图等基本数据结构及其上的操作;掌握二分搜索、Hash技术及搜索树等搜索方法;掌握选择、起泡、插入等简单排序算法,堆排序、快速排序、归并排序和谢尔(希尔)等快速排序算法,以及箱子、基数排序等非比较排序算法。具备利用上述数据结构和算法以及设计新数据结构和算法来求解问题的能力。 2. 题型 选择题、简答题、算法设计题,共75分。

数据结构和C++程序设计_题库

《数据结构》 Part1 一.选择 1. 组成数据的基本单位是() A)数据项B)数据类型C)数据元素D)数据变量 2.算法分析的目的是() A)找出数据结构的合理性B)研究算法的输入/输出关系 C)分析算法的效率以求改进D)分析算法的易读性 3.在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是()A)O(1) B)0(n) C)O(n^2) D)O(nlog2n) 4.若线性表采用顺序存储结构,每个元素占用4个存储单元,第一个元素的存储地址为100,则第12个元素的存储地址是() A)112 B)144 C)148 D)412 5.下面关于线性表的叙述中,错误的是() A)顺序表使用一维数组实现的线性表B)顺序表必须占用一片连续的存储单元. C)顺序表的空间利用率高于链表D)在单链表中,每个结点只有一个链域. 6.在需要经常查找结点的前驱与后继的情况下,使用()比较合适 A)单链表B)双链表C)顺序表D)循环链表 7.队列通常采用的两种存储结构是() A)顺序存储结构和链式存储结构B)散列方式和索引方式 C)链表存储结构和线性存储结构D)线性存储结构和非线性存储结构 8.在一个单链表中,若删除p所指结点的后继结点,则执行() A)p->next=p->next->next;B)p=p->next;p->nex=p->next->next; C)p->next=p->next;D)p=p->next->next; 9.若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省运算时间 A)单链表B)仅有头指针的单循环链表C)双链表D)仅有尾指针的单循环链表 10.按二叉树的定义,具有三个结点的二元树共有()种形态。 A)3 B)4 C)5 D)6 11.任何一棵二叉树的叶结点在先序、中序和后序遍历序列中的相对次序()A)发生改变B)不发生改变C)不能确定D)以上都不对12.深度为5的二叉树至多有()个结点 A)16 B)32 C)31 D)10 13.在一棵度为3的树中,度为3的结点数为2个,度为2的结点数为1个,度为1的结点数为2个,那么度为0的结点数为()个。 A)4 B)5 C)6 D)7 14.对于一个具有n个顶点的无向图,若采用邻接表表示,则存放表头结点的数组(顶点表)的大小为() A)n B)n+1 C)n-1 D)n/2 15.静态查找表和动态查找表二者的根本差别在于()

数据结构实验4队列

实验4 病人看病模拟程序 【问题描述】 编写一个程序,反映病人到医院看病,排队看医生的情况。在病人排队的过程中,主要重复两件事: (1)病人到达诊室,将病历本交给护士,排到等待队列中候诊。(2)护士从等待队列中取出下一位病人的病历,该病人进入诊室就诊。 要求模拟病人等待就诊这一过程。程序采用菜单方式,其选项及功能说明如下: (1)排队――输入排队病人的病历号,加入病人排队队列中。(2)就诊――病人排队队列中最前面的病人就诊,并将其从队列中删除; (3)查看排队――从对首到队尾列出所有的排队病人的病历号;(4)不再排队,余下一次就诊――从对首到队尾列出所有的排队病人的病历号,并退出运行; (5)下班――退出运行; #include #include typedef struct qnode { int data; struct qnode *next; }QNode; //链队结点类型

typedef struct { QNode *front,*rear; }QuType; //链队类型 void seedoctor() //模拟病人看病的过程 { int sel,flag=1,find,no; QuType *qu; QNode *p; qu=(QuType *)malloc(sizeof(QuType)); //创建空队 qu->front=qu->rear=NULL; while(flag==1) { printf("1:排队 2:就诊 3:查看排队 4:不再排队,余下依次就诊 5:下班请选择:"); scanf("%d",&sel); switch(sel) { case 1: printf(">>输入病历号:"); do { scanf("%d",&no); find=0;

北航数据结构与程序设计真题-2013北航991真题与答案

2013年“数据结构与C程序设计”(代码991)试题 一、单项选择题(本题共20分,每小题各2分) 1.对于长度为n的线性表,建立其对应的单链表的时间复杂度为( )。 A.O(1);B.O(log2n);.O(n);D.O(n2)。 2.一般情况下,在一个双向链表中插入一个新的链结点,( )。 A.需要修改4个指针域内的指针;B.需要修改3个指针域内的指针; C.需要修改2个指针域内的指针;D.只需要修改1个指针域内的指针。 3.假设用单个字母表示中缀表达式中的一个运算数(或称运算对象),并利用堆栈产生中缀表达式对应的后缀表达式。对于中缀表达式A+B*(C/D-E),当从左至右扫描到运算数E时,堆栈中的运算符依次是( )。(注:不包含表达式的分界符) A.+*/-;B.+*(/-;C.+*-;.+*(-。 4.若某二叉排序树的前序遍历序列为50,20,40,30,80,60,70,则后序遍历序列为( )。 A.30,40,20,50,70,60,80;B.30,40,20,70,60,80,50; C.70,60,80,50,30,40,20;D.70,60,80,30,40,20,50。 5.分别以6, 3, 8, 12, 5, 7对应叶结点的权值构造的哈夫曼(Huffman) 树的深度为( )。 A.6;B.5;C.4;D.3。 6.下列关于图的叙述中,错误的是( )。 A.根据图的定义,图中至少有一个顶点; B.根据图的定义,图中至少有一个顶点和一条边(弧); C.具有n个顶点的无向图最多有n(n-1)/2条边; D.具有n个顶点的有向图最多有n(n-1)条边(弧)。 7.若在有向图G的拓扑序列中,顶点vi在顶点vj之前,则下列4种情形中不可能出现的是( )。 A.G中有弧; B.G中没有弧; C.G中有一条从顶点vi到顶点vj的路径; D.G中有一条从顶点vj到顶点vi的路径。 8.下列关于查找操作的叙述中,错误的是( )。 A.在顺序表中查找元素可以采用顺序查找法,也可以采用折半查找法; B.在链表中查找结点只能采用顺序查找法,不能采用折半查找法; C.一般情况下,顺序查找法不如折半查找法的时间效率高; D.折半查找的过程可以用一棵称之为“判定树”的二叉树来描述。 9.在一棵m阶B-树中,除根结点之外的任何分支结点包含关键字的个数至少是( )。 A.m/2-1;B.m/2;C.m/2-1;D.m/2。 10.若对序列(49, 38, 65, 97, 76, 13, 27, 49’)进行快速排序,则第一趟排序结束(即确定了第1个分界元素的最终位置)时,序列的状态是( )。 A.(13, 27, 49’, 38, 49, 76, 97, 65);B.(13, 38, 27, 49’, 49, 76, 97, 65); C.(13, 38, 49’, 27, 49, 97, 76, 65);D.(13, 38, 49’, 27, 49, 76, 97, 65)。 二、填空题(本题共20分,每小题各2分) 1.非空线性表在采( )存储结构的情况下,删除表的一个数据元素平均需要移动表中近一半元素的位置。2.将一个长度为n的单链表链接到一个长度为m的单链表后面,该算法的时间复杂度用大O符号表示为( )。 3.若完全二叉树的叶结点的数目为k,且最下面一层的结点数大于1,则该完全二叉树的深度为( )。

数据结构与及程序设计专题实验报告

数据结构与及程序设计专题 实验报告 一.实验任务: 对于给定的源文档 SourceDoc.txt, 1) 统计其中所有字符的频度(某字符的频度等于其出现的总次数除以总字符数),字符包括字母(区分大小写)、标点符号及格式控制符(空格、回车等)。 2) 按频度统计结果构建哈夫曼编码表。 3) 基于哈夫曼编码表进行编码,生成对应的二进制码流,并输出到文件 Encode.dat,完成信源的编码过程。 4) 根据生成的哈夫曼编码表,对二进制码流文件Encode.dat 进行解码,把结果输出到文件 TargetDoc.txt,完成信源的解码过程。 5) 判断 TargetDoc.txt 与 SourceDoc.txt 内容是否 一致,以验证编解码系统的正确性。 二.实验内容: 1) 线性链表的构建以及排序; 2) 哈夫曼树的构建; 3) 基于哈夫曼码进行编码; 4) 对二进制码进行解码;

5)对生成文件与原文件进行比较;三.程序的算法描述

四.程序运行结果:

五.源程序代码: #include #include #include #include typedef struct aa {char data; double rate; int count; struct aa *next; struct aa *pre; char haffmancode[120]; }NODE; NODE *creat(char b[])

{ NODE *h, *p, *s,*death; int i; h=(NODE*)malloc(sizeof(NODE));p=(NODE*)malloc(size of(NODE)); h->next=p;h->pre=NULL; p->pre=h;p->next=NULL; p->data=b[0]; p->count=1.0; for(i=1;b[i]!='\0';i++) {s=(NODE*)malloc(sizeof(NODE)); s->data=b[i]; s->count=1.0; s->next=NULL; s->pre=p; p->next=s; p=s; } return h; } void fun(NODE* h,int amount) { NODE *p,*q,*death; for(p=h->next;p;p=p->next){

数据结构和程序设计真题

程序设计部分 读程序,写结果 1.#include Using namespace std Main(){ int i=2,j=4,m,n; m = ++i + j++;//i=3 j=5 m=3+4=7 n = (++i)+(++j)+m;//i=4,j=6,n=4+6+7=17 cout < Using namespace std main(){ int a=1,b=2,c=3,d=4,y=10; switch(y){ case1:a++;break; default:d=1; case2:b++;break;//d=1,b=3 case4:c++;break; } Cout < Using namespace std Main(){ Int i=0,sum=0; for(;;){ i+=2; if(i>10){ cout <<”sum=”<

4. #include Using namespace std; Int &f1(int &a); Int f2 (int b ); Main(){ Int x=10; Int y=f1(x); Int z=f2(x); cout < Using namespace std Class A{ private: int a; static int b; public: A(int i){a=i;b+=i;} V oid f(); void A::f(){ cout <<”a=”<

相关文档
相关文档 最新文档