医院选址问题

《算法与数据结构》课程设计报告

题目: 医院选址问题

完成日期:2013 年12月27日

一、课程设计目的

本课程设计的目标就是要达到理论与实际应用相结合,提高学生组织数据及编写大型程序的能力,并培养基本的、良好的程序设计技能以及合作能力。

设计中要求综合运用所学知识,上机解决一些与实际应用结合紧密的、规模较大的问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握数据结构和算法设计技术,掌握分析、解决实际问题的能力。

通过这次设计,要求在数据结构的逻辑特性和物理表示、数据结构的选择和

应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

二、课程设计内容

1)问题描述

n个村庄之间的交通图可以用有向网图来表示,图中边上的权值表示从村庄i到村庄j的道路长度。现在要从这n个村庄中选择一个村庄新建一所医院,问这所医院应建在哪个村庄,才能使所有的村庄离医院都比较近? 2) 基本要求

(1) 建立模型,设计存储结构; (2) 设计算法完成问题求解; (3) 分析算法的时间复杂度。

三、课程设计过程

1.需求分析

① 输入的形式和输入值的范围:首先输入村庄数目、道路数目。接着按提示输入道路的起点和终点以及路程

② 输出的形式:输出临接矩阵,再输出偏心度数组,然后输出最适合建立医院的村庄编号

③ 程序所能达到的功能:根据录入的相关数据(包括村庄数目、道路数目、道路的起点和终点以及路程),找出最适合的医院选址,使所有的村庄离医院都比较近。

④ 测试数据:

A. 村庄数目、道路数目:5,7

B. 道路的起点和终点以及路程:1,2,1;2,3,2;3,4,2; 3,5,4;4,2,1;4,3,3;5,4,5.

2.概要设计

说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。

1.为了实现上述程序功能,需要定义有向带权图的抽象数据类型: ①图的结构体定义:

typedef struct {

数据对象:int arcs[MAX_NUM][MAX_NUM]; //邻接矩阵

int vexnum,arcnum; //图的当前顶点和边数 }Graph;

操作结果:构建邻接矩阵的存储结构 ②产生一个有向带权图的邻接矩阵

void CreateGraph(Graph &); //生成图的邻接矩阵

操作结果:在屏幕生成一个有向带权图 ③用弗洛依德算法求最短路径

void floyd(Graph,BOOL[][MAX_NUM][MAX_NUM],int[][MAX_NUM]); //用弗洛依德算法求每对顶点之间的最短路径 操作结果:求得最短路径

2)本程序包含3个函数: ① 主函数main()

② 构造邻接矩阵结构的图函数 CreateGraph() ③ 用弗洛依德算法求最短路径函数 floyd() 各函数间关系如下:

3.详细设计

实现概要设计中定义的所有数据类型,对每个操作只需要写出伪码算法;对主程序和其他模块也都需要写出伪码算法(伪码算法达到的详细程度建议为:按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序);画出函数和过程的调用关系图。

1.定义的数据结构类型 typedef struct {

int arcs[MAX_NUM][MAX_NUM]; //邻接矩阵

int vexnum,arcnum; //图的当前顶点和边数

}Graph;

void CreateGraph(Graph &); //生成图的邻接矩阵

void floyd(Graph,BOOL[][MAX_NUM][MAX_NUM],int[][MAX_NUM]); //用弗洛依德算法求每对顶点之间的最短路径 2.主函数的基本操作

void main() {

do{ switch (i){ case 1: break;

default: exit(1); }

}while(i!=0); }

3.构造邻接矩阵结构的图函数基本操作

void CreateGraph(Graph &G) {

//构造邻接矩阵结构的图G do{

if(G.arcnum>k)

}while(G.arcnumk); for(i=1;i

for(i=1;i

3,弗洛依德算法的基本操作 void floyd(Graph *G,int path[MAX_NUM][MAX_NUM],int A[MAX_NUM][MAX_NUM] ) {

//用弗洛依德算法求有向网G的每对顶点v和w之间的最短路径path[v][w]

//及其带权路径长度D[Av][w],

//若path[v][w][u]为True,表明u是从v到w当前求得最短路径上的顶点 //偏心度数组

for(v=0;vvexnum;v++) //各对顶点之间的初始已知路径及距离 for(w=0;wvexnum;w++) { }

for(v=1;vvexnum;v++) //各对顶点之间的初始已知路径及距离 { for(w=1;wvexnum;w++) { } }

///////////////////////

for(k=1;kvexnum;k++)

for(v=1;vvexnum;v++) //各对顶点之间的初始已知路径及距离 for(w=1;wvexnum;w++) if(A[v][k]+A[k][w]

///邻接矩阵和path矩阵 对角线应该为0 (上1面的结果不是0) for(k=1;kvexnum;k++) { }

///////// for(v=1;vvexnum;v++) //各对顶点之间的初始已知路径及距离 for(w=1;wvexnum;w++) { if(A[v][w]==INFINITY) { } };

}

4.调试分析

1.

for(k=1;kvexnum;k++)

for(v=1;vvexnum;v++) //各对顶点之间的初始已知路径及距离 for(w=1;wvexnum;w++) if(A[v][k]+A[k][w]

///邻接矩阵和path矩阵 对角线应该为0 (上1面的结果不是0) 2. while(next!=0){ //课本上有出入 printf(" -> %d",next); next=path[next][w]; };printf("->%d\n",w);

5.用户使用说明

程序名为gg.cpp,运行环境为Microsoft Visual C++ 6.0。程序执行后显示 ======================= 1: 根据输入数据寻找最佳村庄 0: Exit

======================= SELECT:

在select后输入数字选择执行不同的功能。要求首先输入足够多的数据,才可以进行其他的操作。每执行一次功能,就会显示执行的结果(正确或错误)以及执行后单链表的内容。 选择0:退出程序

选择1:显示“首先输入村庄数目(2-19)和道路数目:

请输入村庄数目(2-19)和道路数目,格式:村庄数目,道路数目” , 要求输入村庄数目和道路数目的值(都是整数)。 6.测试结果

程序名为gg.cpp,运行环境为Microsoft Visual C++ 6.0。程序执行后显示

SELECT:

在select后输入数字选择执行不同的功能。要求首先输入足够多的数据,才可以进行其他的操作。每执行一次功能,就会显示执行的结果(正确或错误)以及执行后单链表的内容。 选择0:退出程序

选择1:显示“首先输入村庄数目(2-19)和道路数目:

请输入村庄数目(2-19)和道路数目,格式:村庄数目,道路数目” , 要求输入村庄数目和道路数目的值(都是整数)。

7.附录

带注释的源程序。 #include #include #include

#define INFINITY 10000 //定义权值的最大值

#define MAX_NUM 20 //图的最大顶点数

typedef struct {

int arcs[MAX_NUM][MAX_NUM]; //邻接矩阵

int vexnum,arcnum; //图的当前顶点和边数 }Graph;

void CreateGraph(Graph &); //生成图的邻接矩阵

void floyd(Graph *G,int path[MAX_NUM][MAX_NUM],int A[MAX_NUM][MAX_NUM] ); //用弗洛依德算法求每对顶点之间的最短路径

void main() {

Graph G; //采用邻接矩阵结构的图 int i;

int path[MAX_NUM][MAX_NUM]; //存放每对顶点的最短路径

int A[MAX_NUM][MAX_NUM]; //存放每对顶点的最短路径的距离 do{ //从菜单中选择遍历方式,输入序号。 printf("\t1: 根据输入数据寻找最佳村庄\n"); printf("\t0: Exit\n");

scanf("%d",&i ); //输入菜单序号(0-1) switch (i){

case 1: printf("首先输入村庄数目(2-19)和道路数目:\n"); CreateGraph(G); //生成邻接矩阵结构的图 Graph *k; k=&G;

floyd(k,path,A); //利用弗洛依德算法求最短路径

break;

default: exit(1); }

printf("\n"); }while(i!=0); }

void CreateGraph(Graph &G) {

//构造邻接矩阵结构的图G int i,j,k;

int start,end,weight; do{ printf("请输入村庄数目(2-19)和道路数目,格式:村庄数目,道路数目\n");

scanf("%d,%d",&G.vexnum,&G.arcnum); //输入图的顶点数和边数 k=G.vexnum*(G.vexnum-1); if(G.arcnum>k) printf("error!!\n");

}while(G.arcnumk); for(i=1;i

G.arcs[i][j]=INFINITY; //初始化邻接矩阵

printf("请输入道路的起点和终点(i,j)及其路程,格式:起点,终点,路程:\n"); for(i=1;i

{scanf("%d,%d,%d",&start,&end,&weight); //输入边的起点和终点及权值 G.arcs[start][end]=weight; } }

void floyd(Graph *G,int path[MAX_NUM][MAX_NUM],int A[MAX_NUM][MAX_NUM] ) {

//用弗洛依德算法求有向网G的每对顶点v和w之间的最短路径path[v][w] //及其带权路径长度D[Av][w],

//若path[v][w][u]为True,表明u是从v到w当前求得最短路径上的顶点 int v,w,k,next,min;

int a[10]; //偏心度数组

for(v=0;vvexnum;v++) //各对顶点之间的初始已知路径及距离 for(w=0;wvexnum;w++) { A[v][w]=G->arcs[v][w]; path[v][w]=0; }

////////////////打印出初始矩阵 printf("\n出初始矩阵:\n");

for(v=1;vvexnum;v++) //各对顶点之间的初始已知路径及距离 { for(w=1;wvexnum;w++) { printf("%8d",A[v][w]); }

printf("\n"); }

///////////////////////

for(k=1;kvexnum;k++)

for(v=1;vvexnum;v++) //各对顶点之间的初始已知路径及距离

for(w=1;wvexnum;w++)

if(A[v][k]+A[k][w]

{

A[v][w]=A[v][k]+A[k][w];

path[v][w]=k;

}

///邻接矩阵和path矩阵 对角线应该为0 (上1面的结果不是0)

for(k=1;kvexnum;k++)

{

A[k][k]=0;

path[k][k]=0;

}

/////////

for(v=1;vvexnum;v++) //各对顶点之间的初始已知路径及距离

for(w=1;wvexnum;w++)

{

printf("顶点%d路径长度%d",v,A[v][w]);

if(A[v][w]==INFINITY)

{

printf("无路径\n");

continue;

}

next=path[v][w];

printf("路径为:%d",v);

while(next!=0){ //课本上有出入

printf(" -> %d",next);

next=path[next][w];

};printf("->%d\n",w);

}

printf("生成的最短路径的邻接矩阵为:\n");

for(v=1;vvexnum;v++)

{for(w=1;wvexnum;w++)

printf("%7d", A[v][w]);

printf("\n");}

///////打印出path

printf("\n path矩阵:\n");

for(v=1;vvexnum;v++) //各对顶点之间的初始已知路径及距离

{

for(w=1;wvexnum;w++)

{

printf("%8d",path[v][w]);

}

printf("\n");

}

printf("偏心度为:");

for(w=1;wvexnum;w++)

{

int max=A[1][w];

for(v=1;vvexnum;v++)

{

if(max

{

max=A[v][w];

}

}

if(max==0)

max=INFINITY;

a[w]=max;

printf("%7d",a[w]);

}

printf("\n");

k=1;

min=a[1];

for(w=1;wvexnum;w++)

{

if(a[w]

{min=a[w];

k=w;}

}

printf("最适合建医院的村庄为:%d\n",k);

}

四、课程设计体会

计算机对我们的现实世界、现实生活具有很大的作用,人们能够通过计算机去解决现实的问题,我们正好通过编程去解决,对现在来说也是很大的帮助。

在数据结构的学习过程中,我们的能力有很大的提高,对我们的未来是一个很大的帮助,对我们的编程积累很大的经验。

我感受最深的一点是:以前用C编程,只是注重如何编写函数能够完成所需要的功能,似乎没有明确的战术,只是凭单纯的意识和简单的语句来堆砌出一段程序。但现在编程感觉完全不同了。在编写一个程序之前,自己能够综合考虑各种因素,首先选取自己需要的数据结构,是树还是图或是别的什么?然后选定一种或几种存储结构来具体的决定后面的函数的主要风格。最后在编写每一个函数之前,可以仔细斟酌比对,挑选出最适合当前状况的算法。这样,即使在完整的程序还没有写出来之前,自己心中已经有了明确的原图了。这样无形中就提高了自己编写的程序的能力。

另外,我还体会到深刻理解数据结构的重要性。只有真正理解这样定义数据类型的好处,才能用好这样一种数据结构。了解典型数据结构的性质是非常有用的,它往往是编写程序的关键。

《算法与数据结构》课程设计报告

题目: 医院选址问题

完成日期:2013 年12月27日

一、课程设计目的

本课程设计的目标就是要达到理论与实际应用相结合,提高学生组织数据及编写大型程序的能力,并培养基本的、良好的程序设计技能以及合作能力。

设计中要求综合运用所学知识,上机解决一些与实际应用结合紧密的、规模较大的问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握数据结构和算法设计技术,掌握分析、解决实际问题的能力。

通过这次设计,要求在数据结构的逻辑特性和物理表示、数据结构的选择和

应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

二、课程设计内容

1)问题描述

n个村庄之间的交通图可以用有向网图来表示,图中边上的权值表示从村庄i到村庄j的道路长度。现在要从这n个村庄中选择一个村庄新建一所医院,问这所医院应建在哪个村庄,才能使所有的村庄离医院都比较近? 2) 基本要求

(1) 建立模型,设计存储结构; (2) 设计算法完成问题求解; (3) 分析算法的时间复杂度。

三、课程设计过程

1.需求分析

① 输入的形式和输入值的范围:首先输入村庄数目、道路数目。接着按提示输入道路的起点和终点以及路程

② 输出的形式:输出临接矩阵,再输出偏心度数组,然后输出最适合建立医院的村庄编号

③ 程序所能达到的功能:根据录入的相关数据(包括村庄数目、道路数目、道路的起点和终点以及路程),找出最适合的医院选址,使所有的村庄离医院都比较近。

④ 测试数据:

A. 村庄数目、道路数目:5,7

B. 道路的起点和终点以及路程:1,2,1;2,3,2;3,4,2; 3,5,4;4,2,1;4,3,3;5,4,5.

2.概要设计

说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。

1.为了实现上述程序功能,需要定义有向带权图的抽象数据类型: ①图的结构体定义:

typedef struct {

数据对象:int arcs[MAX_NUM][MAX_NUM]; //邻接矩阵

int vexnum,arcnum; //图的当前顶点和边数 }Graph;

操作结果:构建邻接矩阵的存储结构 ②产生一个有向带权图的邻接矩阵

void CreateGraph(Graph &); //生成图的邻接矩阵

操作结果:在屏幕生成一个有向带权图 ③用弗洛依德算法求最短路径

void floyd(Graph,BOOL[][MAX_NUM][MAX_NUM],int[][MAX_NUM]); //用弗洛依德算法求每对顶点之间的最短路径 操作结果:求得最短路径

2)本程序包含3个函数: ① 主函数main()

② 构造邻接矩阵结构的图函数 CreateGraph() ③ 用弗洛依德算法求最短路径函数 floyd() 各函数间关系如下:

3.详细设计

实现概要设计中定义的所有数据类型,对每个操作只需要写出伪码算法;对主程序和其他模块也都需要写出伪码算法(伪码算法达到的详细程度建议为:按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序);画出函数和过程的调用关系图。

1.定义的数据结构类型 typedef struct {

int arcs[MAX_NUM][MAX_NUM]; //邻接矩阵

int vexnum,arcnum; //图的当前顶点和边数

}Graph;

void CreateGraph(Graph &); //生成图的邻接矩阵

void floyd(Graph,BOOL[][MAX_NUM][MAX_NUM],int[][MAX_NUM]); //用弗洛依德算法求每对顶点之间的最短路径 2.主函数的基本操作

void main() {

do{ switch (i){ case 1: break;

default: exit(1); }

}while(i!=0); }

3.构造邻接矩阵结构的图函数基本操作

void CreateGraph(Graph &G) {

//构造邻接矩阵结构的图G do{

if(G.arcnum>k)

}while(G.arcnumk); for(i=1;i

for(i=1;i

3,弗洛依德算法的基本操作 void floyd(Graph *G,int path[MAX_NUM][MAX_NUM],int A[MAX_NUM][MAX_NUM] ) {

//用弗洛依德算法求有向网G的每对顶点v和w之间的最短路径path[v][w]

//及其带权路径长度D[Av][w],

//若path[v][w][u]为True,表明u是从v到w当前求得最短路径上的顶点 //偏心度数组

for(v=0;vvexnum;v++) //各对顶点之间的初始已知路径及距离 for(w=0;wvexnum;w++) { }

for(v=1;vvexnum;v++) //各对顶点之间的初始已知路径及距离 { for(w=1;wvexnum;w++) { } }

///////////////////////

for(k=1;kvexnum;k++)

for(v=1;vvexnum;v++) //各对顶点之间的初始已知路径及距离 for(w=1;wvexnum;w++) if(A[v][k]+A[k][w]

///邻接矩阵和path矩阵 对角线应该为0 (上1面的结果不是0) for(k=1;kvexnum;k++) { }

///////// for(v=1;vvexnum;v++) //各对顶点之间的初始已知路径及距离 for(w=1;wvexnum;w++) { if(A[v][w]==INFINITY) { } };

}

4.调试分析

1.

for(k=1;kvexnum;k++)

for(v=1;vvexnum;v++) //各对顶点之间的初始已知路径及距离 for(w=1;wvexnum;w++) if(A[v][k]+A[k][w]

///邻接矩阵和path矩阵 对角线应该为0 (上1面的结果不是0) 2. while(next!=0){ //课本上有出入 printf(" -> %d",next); next=path[next][w]; };printf("->%d\n",w);

5.用户使用说明

程序名为gg.cpp,运行环境为Microsoft Visual C++ 6.0。程序执行后显示 ======================= 1: 根据输入数据寻找最佳村庄 0: Exit

======================= SELECT:

在select后输入数字选择执行不同的功能。要求首先输入足够多的数据,才可以进行其他的操作。每执行一次功能,就会显示执行的结果(正确或错误)以及执行后单链表的内容。 选择0:退出程序

选择1:显示“首先输入村庄数目(2-19)和道路数目:

请输入村庄数目(2-19)和道路数目,格式:村庄数目,道路数目” , 要求输入村庄数目和道路数目的值(都是整数)。 6.测试结果

程序名为gg.cpp,运行环境为Microsoft Visual C++ 6.0。程序执行后显示

SELECT:

在select后输入数字选择执行不同的功能。要求首先输入足够多的数据,才可以进行其他的操作。每执行一次功能,就会显示执行的结果(正确或错误)以及执行后单链表的内容。 选择0:退出程序

选择1:显示“首先输入村庄数目(2-19)和道路数目:

请输入村庄数目(2-19)和道路数目,格式:村庄数目,道路数目” , 要求输入村庄数目和道路数目的值(都是整数)。

7.附录

带注释的源程序。 #include #include #include

#define INFINITY 10000 //定义权值的最大值

#define MAX_NUM 20 //图的最大顶点数

typedef struct {

int arcs[MAX_NUM][MAX_NUM]; //邻接矩阵

int vexnum,arcnum; //图的当前顶点和边数 }Graph;

void CreateGraph(Graph &); //生成图的邻接矩阵

void floyd(Graph *G,int path[MAX_NUM][MAX_NUM],int A[MAX_NUM][MAX_NUM] ); //用弗洛依德算法求每对顶点之间的最短路径

void main() {

Graph G; //采用邻接矩阵结构的图 int i;

int path[MAX_NUM][MAX_NUM]; //存放每对顶点的最短路径

int A[MAX_NUM][MAX_NUM]; //存放每对顶点的最短路径的距离 do{ //从菜单中选择遍历方式,输入序号。 printf("\t1: 根据输入数据寻找最佳村庄\n"); printf("\t0: Exit\n");

scanf("%d",&i ); //输入菜单序号(0-1) switch (i){

case 1: printf("首先输入村庄数目(2-19)和道路数目:\n"); CreateGraph(G); //生成邻接矩阵结构的图 Graph *k; k=&G;

floyd(k,path,A); //利用弗洛依德算法求最短路径

break;

default: exit(1); }

printf("\n"); }while(i!=0); }

void CreateGraph(Graph &G) {

//构造邻接矩阵结构的图G int i,j,k;

int start,end,weight; do{ printf("请输入村庄数目(2-19)和道路数目,格式:村庄数目,道路数目\n");

scanf("%d,%d",&G.vexnum,&G.arcnum); //输入图的顶点数和边数 k=G.vexnum*(G.vexnum-1); if(G.arcnum>k) printf("error!!\n");

}while(G.arcnumk); for(i=1;i

G.arcs[i][j]=INFINITY; //初始化邻接矩阵

printf("请输入道路的起点和终点(i,j)及其路程,格式:起点,终点,路程:\n"); for(i=1;i

{scanf("%d,%d,%d",&start,&end,&weight); //输入边的起点和终点及权值 G.arcs[start][end]=weight; } }

void floyd(Graph *G,int path[MAX_NUM][MAX_NUM],int A[MAX_NUM][MAX_NUM] ) {

//用弗洛依德算法求有向网G的每对顶点v和w之间的最短路径path[v][w] //及其带权路径长度D[Av][w],

//若path[v][w][u]为True,表明u是从v到w当前求得最短路径上的顶点 int v,w,k,next,min;

int a[10]; //偏心度数组

for(v=0;vvexnum;v++) //各对顶点之间的初始已知路径及距离 for(w=0;wvexnum;w++) { A[v][w]=G->arcs[v][w]; path[v][w]=0; }

////////////////打印出初始矩阵 printf("\n出初始矩阵:\n");

for(v=1;vvexnum;v++) //各对顶点之间的初始已知路径及距离 { for(w=1;wvexnum;w++) { printf("%8d",A[v][w]); }

printf("\n"); }

///////////////////////

for(k=1;kvexnum;k++)

for(v=1;vvexnum;v++) //各对顶点之间的初始已知路径及距离

for(w=1;wvexnum;w++)

if(A[v][k]+A[k][w]

{

A[v][w]=A[v][k]+A[k][w];

path[v][w]=k;

}

///邻接矩阵和path矩阵 对角线应该为0 (上1面的结果不是0)

for(k=1;kvexnum;k++)

{

A[k][k]=0;

path[k][k]=0;

}

/////////

for(v=1;vvexnum;v++) //各对顶点之间的初始已知路径及距离

for(w=1;wvexnum;w++)

{

printf("顶点%d路径长度%d",v,A[v][w]);

if(A[v][w]==INFINITY)

{

printf("无路径\n");

continue;

}

next=path[v][w];

printf("路径为:%d",v);

while(next!=0){ //课本上有出入

printf(" -> %d",next);

next=path[next][w];

};printf("->%d\n",w);

}

printf("生成的最短路径的邻接矩阵为:\n");

for(v=1;vvexnum;v++)

{for(w=1;wvexnum;w++)

printf("%7d", A[v][w]);

printf("\n");}

///////打印出path

printf("\n path矩阵:\n");

for(v=1;vvexnum;v++) //各对顶点之间的初始已知路径及距离

{

for(w=1;wvexnum;w++)

{

printf("%8d",path[v][w]);

}

printf("\n");

}

printf("偏心度为:");

for(w=1;wvexnum;w++)

{

int max=A[1][w];

for(v=1;vvexnum;v++)

{

if(max

{

max=A[v][w];

}

}

if(max==0)

max=INFINITY;

a[w]=max;

printf("%7d",a[w]);

}

printf("\n");

k=1;

min=a[1];

for(w=1;wvexnum;w++)

{

if(a[w]

{min=a[w];

k=w;}

}

printf("最适合建医院的村庄为:%d\n",k);

}

四、课程设计体会

计算机对我们的现实世界、现实生活具有很大的作用,人们能够通过计算机去解决现实的问题,我们正好通过编程去解决,对现在来说也是很大的帮助。

在数据结构的学习过程中,我们的能力有很大的提高,对我们的未来是一个很大的帮助,对我们的编程积累很大的经验。

我感受最深的一点是:以前用C编程,只是注重如何编写函数能够完成所需要的功能,似乎没有明确的战术,只是凭单纯的意识和简单的语句来堆砌出一段程序。但现在编程感觉完全不同了。在编写一个程序之前,自己能够综合考虑各种因素,首先选取自己需要的数据结构,是树还是图或是别的什么?然后选定一种或几种存储结构来具体的决定后面的函数的主要风格。最后在编写每一个函数之前,可以仔细斟酌比对,挑选出最适合当前状况的算法。这样,即使在完整的程序还没有写出来之前,自己心中已经有了明确的原图了。这样无形中就提高了自己编写的程序的能力。

另外,我还体会到深刻理解数据结构的重要性。只有真正理解这样定义数据类型的好处,才能用好这样一种数据结构。了解典型数据结构的性质是非常有用的,它往往是编写程序的关键。


相关内容

  • 药店选址理论与实践
  • ・药店与执业药师・ 药店选址理论与实践 罗臻+(兰州大学药学院,兰州市730000) 中图分类号摘要 R952 文献标识码C文章编号 100卜0408(2007)19-1518-02 目的:探索.总结药店选址的规律和经验.方法:论述药店选址的重要性,阐明药店选址的理论原则,提出药店选址的具体 思路. ...

  • 中医诊所可行性研究报告及选址报告
  • 设置医疗机构可行性研究报告 A.申请单位及申请人基本情况 申请单位名称:李佳中医诊所. 申请人:李佳,年龄32岁,医学博士,曾在湖北省中医院.武汉市第一医院.协和医院的针灸科.骨科等科室实习,同时在湖北中医药大学国医堂.武汉市雨之堂中医门诊部.永清街专家门诊等诊所担任主诊医师,积累了丰富的临床经验. ...

  • 基于空间引力模型的选址问题研究
  • 第26卷第5期2009年5月 公路交通科技 V01.26No.52009 Jo哪aJ of Hi曲way and愉1sp()眦ionResearch andDeVelopment Mav 文章编号:1002-0268[2009)05.0103讲 基于空间引力模型的选址问题研究 胡丹丹,杨超,杨琚 ( ...

  • 母婴用品店投资创业方案之如何选址
  • 母婴用品店投资创业方案之如何选址母婴店市场分析 母婴店的主要消费群是年轻父母们,他们舍得为孩子花钱,因此市场潜力大.新生儿父母在年龄的下移和文化层次的提高,表现在了对孩子培养知识的渴求和健康意识的增强,伴之而来的是对多功能,多样化的产品,高质量商品高品位服务的需求. 母婴行业入门槛并不高,目前开婴儿 ...

  • 设立民营医院项目可行性研究报告
  • 设立民营医院项目 可行性研究报告 一.政策环境 民营医院是指由社会资本出资兴办的医疗机构.一直以来,中国对医疗机构实施国有管理,国有公立医院由当地卫生部门直接管辖,设立民营医院必须经当地卫生部门批准.虽然政策没有限制民营医院的设立,但各地卫生部门出于种种原因很少批准民营医院的设立申请.自2001年起 ...

  • 如何开花店
  • 我的开花店计划 投资比例:自身收入状况 收益前期 抗风险能力 开鲜花店,一般要考虑选址.注册登记.店面规模. 经营品种.迚货渠道.日常费用.市场风险等各方面 的问题. 选址:重要性不言而喻.按照常理,哪里开的花店少,就在哪里选址,这样可以避开同业之间由于距离很近而导致的过度竞争.但必须注意的是,店面 ...

  • 零售选址分析报告
  • 选 址 分 析 报 告 1)报告撰写背景 要求学生综合运用"选址理论分析"."商店位置类型"."零售选址策略"等理论,对小组拟定的店铺选址项目进行分析,从而掌握零售选址分析技能. 2)报告撰写的必要性 使学生能够掌握<零售选址分析报告 ...

  • 可行性论证分析报告
  • 富士康科技集团新建厂房选址项目 可 行 性 论 证 分 析 报 告 某某管理咨询公司 二零一一年十二月 目 录 1.项目概况................................................2 2.项目背景................................ ...

  • 眼镜店的生意秘诀
  • 你的眼镜店会倒闭吗? 有她就不会-阿里眼镜 在中国,赚钱的事不能够公开,当世人都知道这个行业有暴利时,往往距离全行业白热化竞争已经不远了. 据有关资料统计: 近几年,南京倒闭的眼镜店达40多家,其中大部分是国际知名眼镜店: 广州市每年都有近百家眼镜店倒闭,以北京路为例, 在10年前曾有眼镜店近20家 ...