数据结构课程设计报告模板

数据结构课程设计报告模板
数据结构课程设计报告模板

校园导游系统设计

一、设计要求

1.问题描述

设计一个校园导游程序,为来访的客人提供信息查询服务。

2.需求分析

(1)设计学校的校园平面图。选取若干个有代表性的景点抽象成一个无向带权图(无向网),以图中顶点表示校内各景点,边上的权值表示两景点之间的距离。

(2)存放景点代号、名称、简介等信息供用户查询。

(3)为来访客人提供图中任意景点相关信息的查询。

(4)为来访客人提供图中任意景点之间的问路查询。

(5)可以为校园平面图增加或删除景点或边,修改边上的权值等。

二、概要设计

为了实现以上功能,可以从3个方面着手设计。

1.主界面设计

为了实现校园导游系统各功能的管理,首先设计一个含有多个菜单项的主控菜单子程序以链接系统的各项子功能,方便用户使用本系统。本系统主控菜单运行界面如图7-10所示。

2.存储结构设计

本系统采用图结构类型(mgraph)存储抽象校园图的信息。其中:各景点间的邻接关系用图的邻接矩阵类型(adjmatrix)存储;景点(顶点)信息用结构数组(vexs)存储,其中每个数组元素是一个结构变量,包含景点编号、景点名称及景点介绍三个分量;图的顶点个数及边的个数由分量vexnum、arcnum表示,它们是整型数据。

此外,本系统还设置了三个全局变量:visited[ ] 数组用于存储顶点是否被访问标志;d[ ]数组用于存放边上的权值或存储查找路径顶点的编号;campus是一个图结构的全局变量。

3.系统功能设计

本系统除了要完成图的初始化功能外还设置了8个子功能菜单。图的初始化由函数initgraph( )实现。依据读入的图的顶点个数和边的个数,分别初始化图结构中图的顶点向量数组和图的邻接矩阵。8个子功能的设计描述如下。

(1)学校景点介绍

学校景点介绍由函数browsecompus( )实现。当用户选择该功能,系统即能输出学校全部景点的信息:包括景点编号、景点名称及景点简介。

(2)查看浏览路线

查看浏览路线由函数shortestpath_dij( )实现。该功能采用迪杰斯特拉(Dijkstra)算法实现。当用户选择该功能,系统能根据用户输入的起始景点编号,求出从该景点到其它景点的最短路径线路及距离。

(3)查看两景点间最短路径

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

查看两景点间最短路径由函数shortestpath_floyd( )实现。该功能采用弗洛伊德(Floyd)算法实现。当用户选择该功能,系统能根据用户输入的起始景点及目的地景点编号,查询任意两个景点之间的最短路径线路及距离。

(4)景点信息查询

景点信息查询由函数seeabout( )实现。该功能根据用户输入的景点编号输出该景点的相关信息。例如,景点编号、名称等。

(5)更改图的信息

更改图的信息功能由主调函数changegraph( )及若干个子函数完成,可以实现图的若干基本操作。例如:增加新的景点、删除边、重建图等。

(6)查询景点间可行路径

该功能是查询两景点间所有可行路径,由函数allpath( )和函数path( )实现,其中path( )函数是直接递归函数。由于是无向网,如果网中的边数很多,任意两个景点间的所有路径也会有限多,但很多路径是无实际意义的(有近路,为什么去走远路呢?)。所以,本算法在求得的两景点间所有可行路径中,限制只输出路径长度不超过8个景点的路线。

(7)打印邻接矩阵

该功能即输出图的邻接矩阵的值,由函数printmatrix( )实现。

(8)退出

即退出校园导游系统,由exit(0)函数实现。

三、模块设计

1.校园抽象图设计

以湖北第二师范学院光谷校区主要景点为例,抽象完成的无向网如图7-7所示。全校共抽象出28个景点,39条道路。各景点分别用图中的顶点表示,景点编号从0-27;39条道路分别用图中的边表示,边上的权值表示景点之间的模拟距离。

2

第7章 图结构及其应用 3

图7-7 抽象的二师院光谷校区无向带权图

2.模块设计

本程序包含3个模块:主程序模块、工作区模块和无向网操作模块。调用关系如图7-8所示。

图7-8 模块调用示意图

3.系统子程序及功能设计

本系统共设置18个子程序,各子程序的函数名及功能说明如下。

(1)mgraph initgraph( ) // 图的初始化

(2)int locatevex(mgraph c, int v) // 查找景点在图中的序号

(3)void path(mgraph c, int m,int n,int k) // 打印序号为m,n 景点间的长度不超过8个景点的路径 (4)int allpath(mgraph c) // 打印两景点间的景点个数不超过8的所有路径。调用(3) (5)void shortestpath_dij(mgraph c) // 用Dijkstra 算法,求一个景点到其他景点间的最短路径,并打印

以下编号(6)-(12)是图的基本操作。包括:重建图、更新信息、删除、增加结点和边等。 (6)int creatgragh(mgraph &c) // 建图。以图的邻接矩阵存储图 (7)int newgraph(mgraph &c) // 更新图的部分信息。返回值:1

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

(8)int enarc(mgraph&c) // 增加一条边。返回值:1

(9)int envex(mgraph&c) // 增加一个结点。返回值:1

(10)int delvex(mgraph&c) // 删除图的一个顶点。返回值:1

(11)int delarc(mgraph&c) // 删除图的一条边。返回值:1

(12)void printmatrix(mgraph c) // 输出图的邻接矩阵

(13)int changegraph(mgraph &c) // 图操作的主调函数。返回值:1

(14)void shortestpath_floyd(mgraph c) // 用Floyd算法求任意两景点间的最短路径,并输出

(15)void seeabout(mgraph c) // 查询景点的信息

(16)void browsecompus(mgraph c) // 显示所有景点信息

(17)void mainwork( ) // 工作区函数。操作区用户界面

(18)void main( ) // 主函数。设定界面的颜色和大小,调用工作区模块函数

4.函数主要调用关系图

校园导游系统18个子程序之间的主要调用关系如图7-9所示。图中数字是各函数的编号。

图7-9 系统函数调用关系图

四、详细设计

1.数据类型定义

(1)无向带权图(无向网)的定义

typedef struct arcell //边的权值信息

{

int adj; //权值

}arcell,adjmatrix[MaxV ertexNum][MaxV ertexNum]; //图的邻接矩阵类型

4

第7章图结构及其应用

typedef struct vexsinfo //顶点信息

{

int position; //景点的编号

char name[32]; //景点的名称

char introduction[256]; //景点的介绍

}vexsinfo;

typedef struct mgraph //图结构信息

{

vexsinfo vexs[MaxV ertexNum]; //顶点向量(数组)

adjmatrix arcs; //邻接矩阵

int vexnum,arcnum; //分别指定顶点数和边数

}mgraph;

(2)全局变量定义

int visited[35]; //用于标志顶点是否已经访问过

int d[35]; //用于存放权值或存储路径顶点编号

mgraph campus; //图变量(大学校园)

2.系统主要子程序详细设计

(1)主程序模块设计

主函数。设定用户操作界面的颜色和大小,调用工作区模块函数。

void main( )

{

system("color 1f"); //屏幕颜色设定

system("mode con: cols=140 lines=130");

mainwork( );

}

(2)用户工作区模块设计

主要工作函数。操作区用户界面设计。

void mainwork( )

{

int yourchoice;

campus=initgraph( );

printf("\n-----------------------------------------欢迎使用校园导游程序--------------------------------------------\n"); printf("\n 欢迎来到湖北第二师范学院! \n\n"); printf("\n 菜单选择\n\n"); printf(" 1. 学校景点介绍 2. 查看游览路线\n");

5

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

printf(" 3. 查询景点间最短路径 4. 景点信息查询\n"); printf(" 5. 更改图信息 6. 查询景点间可行路径\n"); printf(" 7. 打印邻接矩阵8. 退出\n"); printf("\n-------------------------------------------------------------------------------------------------------------------\n"); printf("请输入你的选择:");

scanf("%d",&yourchoice);

while(!(yourchoice==1||yourchoice==2||yourchoice==3||yourchoice==4||yourchoice==5||yourchoice==6 ||yourchoice==7||yourchoice==8))

{

printf ("输入选择不明确,请重新输入\n");

scanf("%d", &yourchoice);

}

while(1)

{

switch(yourchoice)

{

case 1: system("cls"); browsecompus(campus); break;

case 2: system("cls"); shortestpath_dij(campus); break;

case 3: system("cls"); shortestpath_floyd(campus); break;

case 4: system("cls"); seeabout(campus); break;

case 5: system("cls"); changegraph(campus); break;

case 6: system("cls"); allpath(campus); break;

case 7: system("cls"); printmatrix(campus); break;

case 8: system("cls"); exit(0); break;

default: break;

}

printf("\n----------------------------------欢迎使用校园导游程序------------------------------------\n");

printf("\n 欢迎来到湖北第二师范学院! \n\n");

printf("\n 菜单选择\n\n");

printf(" 1. 学校景点介绍 2. 查看游览路线\n");

printf(" 3. 查询景点间最短路径 4. 景点信息查询\n");

printf(" 5. 更改图信息 6. 查询景点间可行路径\n");

printf(" 7. 打印邻接矩阵8. 退出\n");

printf("\n----------------------------------------------------------------------------------------------------\n");

printf("\n请输入你的选择:");

scanf("%d", &yourchoice);

}//endwhile(1)

}//mainwork

6

第7章图结构及其应用

(3)无向网操作主调模块设计

int changegraph(mgraph &c)

{

int yourchoice;

printf("\n请问是要\n\n (1)再次建图(2)删除结点(3)删除边\n");

printf("\n (4)增加结点(5)增加边(6)更新信息\n\n (7)打印邻接矩阵(8)返回? \n\n"); scanf("%d",&yourchoice); printf("\n\n");

while(!(yourchoice==1||yourchoice==2||yourchoice==3||yourchoice==4||yourchoice==5||yourchoice==6 ||yourchoice==7||yourchoice==8))

{

printf("输入选择不明确,请重输\n");

scanf("%d",&yourchoice);

}

while(1)

{

switch(yourchoice)

{

case 1: creatgragh(c); break; // 重建图,调用(6)

case 2: delvex(c); break; // 删除顶点,调用(10)

case 3: delarc(c); break; // 删除边,调用(11)

case 4: envex(c); break; // 增加顶点,调用(9)

case 5: enarc(c); break; // 增加边,调用(8)

case 6: newgraph(c); break; // 更新图的信息,调用(7)

case 7: printmatrix(c); break; // 输出邻接矩阵,调用(12)

case 8: return 1; // 返回主菜单

}

printf("\n请问是要\n\n (1)再次建图(2)删除结点(3)删除边\n");

printf("\n (4)增加结点(5)增加边(6)更新信息\n\n (7)打印邻接矩阵(8)返回? \n\n");

scanf("%d",&yourchoice); printf("\n\n");

while(!(yourchoice==1||yourchoice==2||yourchoice==3||yourchoice==4||yourchoice==5||yourchoice==6 ||yourchoice==7||yourchoice==8))

{

printf("输入选择不明确,请重输\n");

scanf("%d",&yourchoice);

}

}//endwhile(1)

return 1;

}//changegraph

7

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

(4)求两景点间的所有路径

int allpath(mgraph c)

{// 4. 求两景点间的所有路径

//算法中将路径起始点编号m存入d[ 0]数组元素中,并将其顶点访问标志设置为1,即visited[m]=1 //然后调path( ) 函数求由m出发到景点n的所有路径。

int k, i, j, m, n;

printf("\n\n请输入你要查询的两个景点编号:\n\n");

scanf("%d%d",&i,&j); printf("\n\n");

m=locatevex(c,i); //调用2,确定该顶点是否存在。若存在,返回该顶点编号n=locatevex(c,j);

d[0]=m; //存储路径起点m (int d[ ]数组是全局变量)

for(k=0;k

visited[m]=1; //第m个顶点访问标志设置为1

path(c,m,n,0); //调用3。k=0,对应起点d[0]= =m。k为d[ ]数组下标

return 1;

}//endallpath

void path(mgraph c, int m,int n,int k)

{// 3. 自递归调用函数。若顶点s是由m出发到景点n的路径上的顶点,则调用自身,求由s出发的所//有可能到达顶点n的路径。找到一条(递归出口),输出一条(限制只输出景点个数<=8的路径)。

//d[ ]数组存储由m出发到景点n的路径上的顶点编号,visited[ ]数组用于存放顶点是否被访问的标志int s, x=0, t=k+1; // t 用于存放路径上下一个顶点对应的d[ ]数组元素的下标

if (d[k]==n && k<8) //递归出口,找到一条路径。若d[k]是终点n且景点个数<=8,则输出该路径{

f or (s=0;s

printf("%s--->",c.vexs[d[s]].name); //输出该路径。s=0 时为起点m

printf("%s\n\n",c.vexs[d[s]].name); //输出最后一个景点名(即顶点n的名字,此时s==k) }

else

{

s=0;

while(s

{

if((c.arcs[d[k]][s].adj

{

visited[s]=1;

d[k+1]=s; //存储顶点编号s 至d[k+1]中

path(c,m,n,t); //求从下标为t=k+1的第d[t]==s个顶点开始的路径(递归调用),

8

第7章图结构及其应用

//同时打印出一条m至n的路径

visited[s]=0; //将找到的路径上顶点的访问标志重新设置为0,以用于试探新的路径}

s++; //试探从下一个顶点s 开始是否有到终点的路径

}//endwhile

}//endelse

}//endpath

(5)用迪杰斯特拉(Dijkstra)算法,求一个景点到其它景点间的最短路径并打印

void shortestpath_dij(mgraph c)

{ // 5. 迪杰斯特拉算法,求从顶点v0到其余顶点的最短路经p[ ]及其带权长度d[v] (最短路经的距离)

// p[ ][ ]数组用于存放两顶点间是否有通路标志。若p[v][w]= =1,则w是从v0到v的最短路经上的顶点。// final[ ]数组用于设置访问标志。

int v, w, i, min, t=0, x, flag=1, v0; //vo为起始景点的编号

int final[35], d[35], p[35][35];

printf("\n请输入一个起始景点的编号:");

scanf("%d",&v0); printf("\n\n");

while(v0<0||v0>c.vexnum)

{

printf("\n你所输入的景点编号不存在\n");

printf("请重新输入:");

scanf("%d",&v0);

}//while

for(v=0;v

{

final[v]=0; //初始化各顶点访问标志

d[v]=c.arcs[v0][v].adj; //v0 到各顶点v 的权值赋值给d[v]

for(w=0;w

if(d[v]

{

p[v][v0]=1;

p[v][v]=1; //各顶点自己到自己要连通

}

}//for

d[v0]=0; //自己到自己的权值设为0

final[v0]=1; // v0的访问标志设为1,v 属于s 集

for(i=1;i

9

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

10

min=Infinity;

for(w=0;w

if(!final[w])

if(d[w]

{

v=w; min=d[w];

}//if

final[v]=1; // v 的访问标志设置为1,v 属于s集

for(w=0;w

if(!final[w]&&(min+c.arcs[v][w].adj

d[w]=min+c.arcs[v][w].adj; //修改v0 到w 的权值d[w]

for(x=0;x

p[w][w]=1;

}//if

}//for

for(v=0;v

{

if(v!=v0)

printf("%s",c.vexs[v0].name); //输出景点v0 的景点名

for(w=0;w

if(p[v][w] && w!=v0 && w!=v) //若w 是且w 不等于v0,则输出该景点

printf("--->%s",c.vexs[w].name);

}

printf("---->%s",c.vexs[v].name);

printf("\n总路线长为%d米\n\n",d[v]);

}//for

}//shortestpath_dij

(6)用弗洛伊德(floyd)算法,求两景点间的最短路径并打印

void shortestpath_floyd(mgraph c)

{ // 14. 用floyd算法,求各对顶点v和w间的最短路经p[ ][ ]及其带权长度d[v][w]

// 若p[v][w][u]= =1;则u是v到w的当前求得的最短路经上的顶点

int i, j, k, v, u, w, d[35][35], p[35][35][35];

for(v=0;v

for(w=0;w

第7章图结构及其应用

{

d[v][w]=c.arcs[v][w].adj; //d[v][w] 中存放v 至w 间初始权值

for(u=0;u

if(d[v][w]

{

p[v][w][v]=1; // v 是v 至w 最短路径上的顶点

p[v][w][w]=1; // w 是v 至w 最短路径上的顶点

}//if

}//for

}//endfor

for(u=0;u

{// 对任意顶点u,试探其是否为v至w最短路径上的顶点

for(v=0;v

for(w=0;w

if(d[v][u]+d[u][w]

{

d[v][w]=d[v][u]+d[u][w]; //修改v 至w 的最短路径长度

for(i=0;i

p[v][w][i] = p[v][u][i] || p[u][w][i]; //若i是v至u的最短路径上的顶点,或i是u至w的

//最短路径上的顶点,则i是v至w的最短路径上的顶点}

}//endfor

printf ("\n请输入出发点和目的地编号:");

scanf("%d%d",&k,&j); printf("\n\n");

while(k<0||k>c.vexnum||j<0||j>c.vexnum)

{

printf("\n你所输入的景点编号不存在!");

printf("\n请重新输入出发点和目的地编号:\n\n");

scanf("%d%d",&k,&j); printf("\n\n");

}

printf("%s",c.vexs[k].name ); //输出出发景点名称

for(u=0;u

if(p[k][j][u] && k!=u && j!=u) //输出最短路径上中间景点名称

printf("--->%s",c.vexs[u].name );

printf("--->%s",c.vexs[j].name ); //输出目的地景点名称

printf("\n\n\n总长为%d米\n\n\n",d[k][j]);

}//shortestpath_floyd

11

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

12

五、 测试分析

系统运行主界面如图7-10所示。

图7-10 校园导游系统主菜单

各子功能测试运行结果如下。

1.学校景点介绍

在主菜单下,用户输入1回车,运行结果如图7-11所示。

图7-11 二师院光谷校区景点名称及简介

2.查看浏览路线

在主菜单下,用户输入.2回车,根据屏幕提示输入一个景点编号4回车后,系统会给出由景点4到其余27个景点的最短浏览线路及最短距离。运行结果的截图如图7-12所示。

不足之处:线路的编排受景点编号的影响,有些可能不合理。

第7章 图结构及其应用 13

图7-12 从一个景点出发的浏览路线图

3.查看两景点间最短路径

在主菜单下,用户输入3回车,根据屏幕提示输入一个出发景点编号及目的地景点编号:3 17回车后,运行结果如图7-13所示。

不足之处:线路的编排受景点编号的影响,有些可能不合理。

图7-13 任意两个景点之间的最短浏览路线图

4.景点信息查询

在主菜单下,用户输入4回车,根据屏幕提示输入一个要查询的景点编号20回车后,运行结果如图7-14所示。

不足之处:仅能根据景点编号进行查询,可以增加根据景点名进行查询的功能。

图7-14 景点信息查询

5.更改图的信息

在主菜单下,用户输入5回车后出现二级菜单界面,运行结果如图7-15所示。再进一步做选择,可以实现图的相关基本操作。

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

14

图7-15 更改图的信息

6.查询景点间可行路径

本算法在求得的两景点间所有可行路径中,限制只输出路径长度不超过8个景点的路线。在主菜单下,用户输入6回车,根据屏幕提示输入要查询的两个景点编号:5 17回车后,运行结果截图如图7-16所示。本功能由递归函数实现,所以当图中的边数过多时,可能造成死循环而得不到正确结果。

不足之处:线路的编排受景点编号的影响,有些可能不合理。

图7-16 查询两景点间的可行路径

7.打印邻接矩阵

在主菜单下,用户输入7回车,即可输出图的邻接矩阵的值。如图7-17所示。

图7-17 图的邻接矩阵

8.退出

在主菜单下,用户输入8回车,即退出校园导游系统。

第7章图结构及其应用

六、源程序清单

#define Infinity 1000

#define MaxVertexNum 35

#define MAX 40

#include

#include

#include

#include

#include

typedef struct arcell

{//边的权值信息

int adj; //权值

}arcell, adjmatrix[MaxV ertexNum][MaxV ertexNum]; //图的邻接矩阵类型

typedef struct vexsinfo

{//顶点信息

int position; //景点的编号

char name[32]; //景点的名称

char introduction[256]; //景点的介绍

}vexsinfo;

typedef struct mgraph

{//图结构信息

vexsinfo vexs[MaxV ertexNum]; //顶点向量(数组)

adjmatrix arcs; //邻接矩阵

int vexnum,arcnum; //分别指定顶点数和边数

}mgraph;

//全局变量

int visited[35]; //用于标志是否已经访问过

int d[35]; //用于存放权值或存储路径顶点编号

mgraph campus; //图变量(大学校园)

// 1. 对图初始化

mgraph initgraph( )

{

int i=0,j=0;

mgraph c;

c.vexnum =28; //顶点个数

c.arcnum =39; //边的个数

for(i=0;i

c.vexs[i].position =i;

15

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

//依次输入顶点信息

strcpy(c.vexs[0].name ,"小西南门");

strcpy(c.vexs[0].introduction ,"离公交站近");

strcpy(c.vexs[1].name ,"学校南正门");

strcpy(c.vexs[1].introduction ,"学校大门、学校班车进出口");

strcpy(c.vexs[2].name ,"语言文化职业学院");

strcpy(c.vexs[2].introduction ,"语言文化职业学院办公楼,楼高6层");

strcpy(c.vexs[3].name ,"艺术学院");

strcpy(c.vexs[3].introduction ,"音乐系、美术系,楼高4层");

strcpy(c.vexs[4].name ,"行政楼");

strcpy(c.vexs[4].introduction ,"行政办公大楼,楼高5层");

strcpy(c.vexs[5].name,"文学院");

strcpy(c.vexs[5].introduction ,"文学院,楼高6层");

strcpy(c.vexs[6].name ,"体育场");

strcpy(c.vexs[6].introduction ,"室外标准田径场");

strcpy(c.vexs[7].name,"教育科学学院");

strcpy(c.vexs[7].introduction ,"教心系、经管系,楼高5层");

strcpy(c.vexs[8].name ,"南区学生宿舍");

strcpy(c.vexs[8].introduction ,"离西南门近");

strcpy(c.vexs[9].name, "数学与经济管理学院");

strcpy(c.vexs[9].introduction , "数学与经济管理学院大楼,楼高4层");

strcpy(c.vexs[10].name ,"中区学生宿舍");

strcpy(c.vexs[10].introduction ,"若干栋,离学生1、2食堂近");

strcpy(c.vexs[11].name ,"职业学院教学大楼");

strcpy(c.vexs[11].introduction ,"职业学院教学大楼,楼高5层");

strcpy(c.vexs[12].name ,"体育系");

strcpy(c.vexs[12].introduction ,"体育系,楼高5层");

strcpy(c.vexs[13].name ,"游泳馆");

strcpy(c.vexs[13].introduction ,"室内小型游泳馆");

strcpy(c.vexs[14].name ,"报告厅、阶梯教室");

strcpy(c.vexs[14].introduction ,"可举办中、大型学术会议。有大小报告厅1-6个、阶梯教室1-6个"); strcpy(c.vexs[15].name ,"大礼堂、体育馆");

strcpy(c.vexs[15].introduction ,"文艺演出所在地、室内运动场");

strcpy(c.vexs[16].name ,"1食堂");

strcpy(c.vexs[16].introduction ,"教工食堂及学生1食堂在此");

strcpy(c.vexs[17].name ,"新图书馆");

strcpy(c.vexs[17].introduction ,"建筑面积46000平方米");

strcpy(c.vexs[18].name ,"2食堂");

strcpy(c.vexs[18].introduction ,"学校东区,学生食堂");

16

第7章图结构及其应用

strcpy(c.vexs[19].name ,"东区学生宿舍");

strcpy(c.vexs[19].introduction ,"离学生2食堂近");

strcpy(c.vexs[20].name ,"计算机学院");

strcpy(c.vexs[20].introduction ,"计算机学院大楼,楼高5层");

strcpy(c.vexs[21].name ,"教工宿舍");

strcpy(c.vexs[21].introduction ,"学校青年教职工租住地");

strcpy(c.vexs[22].name ,"西区学生宿舍");

strcpy(c.vexs[22].introduction ,"离学生3、4食堂近");

strcpy(c.vexs[23].name ,"3食堂");

strcpy(c.vexs[23].introduction ,"学校西区,学生食堂");

strcpy(c.vexs[24].name ,"外国语学院");

strcpy(c.vexs[24].introduction ,"外国语学院大楼,楼高5层");

strcpy(c.vexs[25].name ,"4食堂");

strcpy(c.vexs[25].introduction ,"学校西区,学生食堂,人气较高");

strcpy(c.vexs[26].name ,"校医院");

strcpy(c.vexs[26].introduction ,"看小病的地方");

strcpy(c.vexs[27].name ,"实验楼");

strcpy(c.vexs[27].introduction ,"物电学院、化学与生命科学学院、机电系、建材系所在地,机房及多媒体教室若干");

for(i=0;i

for(j=0;j

c.arcs [i][j].adj =Infinity; //先初始化图的邻接矩阵

c.arcs[0][2].adj=50; c.arcs[0][3].adj=60; c.arcs[1][4].adj=90; c.arcs[2][3].adj=60; c.arcs[2][8].adj=40; c.arcs[3][4].adj=60; c.arcs[3][6].adj=40; c.arcs[4][5].adj=70;

c.arcs[4][9].adj=70; c.arcs[4][10].adj=80; c.arcs[4][17].adj=200; c.arcs[5][7].adj=70; c.arcs[6][9].adj=40; c.arcs[7][18].adj=190; c.arcs[8][11].adj=50; c.arcs[9][12].adj=40; c.arcs[10][18].adj=70; c.arcs[11][12].adj=60; c.arcs[11][14].adj=50; c.arcs[11][15].adj=50; c.arcs[12][16].adj=50; c.arcs[13][14].adj=40; c.arcs[13][22].adj=60; c.arcs[14][15].adj=50; c.arcs[14][20].adj=90; c.arcs[15][16].adj=60; c.arcs[15][21].adj=40; c.arcs[16][17].adj=60;

c.arcs[17][18].adj=80; c.arcs[18][19].adj=60; c.arcs[20][21].adj=60; c.arcs[20][24].adj=80;

c.arcs[22][23].adj=60; c.arcs[22][25].adj=80; c.arcs[23][24].adj=60; c.arcs[24][26].adj=100;

c.arcs[24][27].adj=100; c.arcs[25][26].adj=90; c.arcs[26][27].adj=90;

for(i=0;i

for(j=0;j

c.arcs[j][i].adj =c.arcs[i][j].adj ;

return c;

}//initgraph

// 2. 查找景点在图中的序号

int locatevex(mgraph c,int v)

17

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

{

int i;

for (i=0;i

if (v==c.vexs[i].position)

return i; //找到,返回顶点序号i return -1; //否则,返回-1

}

// 3. 查找并输出序号为m,n景点间的长度不超过8个景点的路径

void path(mgraph c, int m,int n,int k) //源代码参见:7.2.4详细设计2.(4)// 4. 查找两景点间的景点的所有路径。

int allpath(mgraph c) //源代码参见:7.2.4详细设计2.(4)// 5. 用迪杰斯特拉算法,求出一个景点到其他景点间的最短路径,并打印

void shortestpath_dij(mgraph c) //源代码参见:7.2.4详细设计2.(5)// 6-11修改图的信息。包括建图、更新信息、删除、增加结点和边

// 6. 构造图的邻接矩阵

i nt creatgragh(mgraph &c) //建图。以图的邻接矩阵存储图

{

int i, j, m, n, v0,v1,distance;

printf("请输入图的顶点数和边数: \n");

scanf("%d %d",&c.vexnum ,&c.arcnum );

printf("下面请输入景点的信息:\n");

for(i=0;i

{

printf("请输入景点的编号:");

scanf("%d",c.vexs[i].position );

printf("\n请输入景点的名称:");

scanf("%s",c.vexs[i].name );

printf("\n请输入景点的简介:");

scanf("%s",c.vexs[i].introduction );

}

for(i=0;i

for(j=0;j

c.arcs[i][j].adj =Infinity;

printf("下面请输入图的边的信息:\n");

for(i=1;i<=c.arcnum ;i++) //构造邻接矩阵

{

printf("\n第%d条边的起点终点长度为:",i);//输入一条边的起点、终点及权值scanf("%d %d %d",&v0,&v1,&distance);

m=locatevex(c,v0);

18

第7章图结构及其应用

n=locatevex(c,v1);

if(m>=0 && n>=0)

{

c.arcs[m][n].adj =distance;

c.arcs[n][m].adj =c.arcs[m][n].adj ;

}

}

return 1;

}//creat gragh

// 7. 更新图的部分信息。返回值: 1

int newgraph(mgraph &c)

{

int changenum; //计数。用于记录要修改的对象的个数

int i, m, n, t, distance, v0, v1;

printf("\n下面请输入你要修改的景点的个数:\n");

scanf("%d",&changenum);

while(changenum<0||changenum>c.vexnum )

{

printf("\n输入错误!请重新输入");

scanf("%d",&changenum);

}

for(i=0;i

{

printf("\n请输入景点的编号:");

scanf("%d",&m);

t=locatevex(c,m);

printf("\n请输入景点的名称:");

scanf("%s",c.vexs[t].name );

printf("\n请输入景点的简介:");

scanf("%s",c.vexs[t].introduction );

}

printf("\n下面请输入你要更新的边数");

scanf("%d",&changenum);

while(changenum<0||changenum>c.arcnum )

{

printf("\n输入错误!请重新输入");

scanf("%d",&changenum);

}

printf("\n下面请输入更新边的信息:\n");

19

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

for(i=1;i<=changenum ;i++)

{

printf("\n修改的第%d条边的起点终点长度为:",i);

scanf("%d %d %d",&v0,&v1,&distance);

m=locatevex(c,v0);

n=locatevex(c,v1);

if(m>=0&&n>=0)

{

c.arcs[m][n].adj =distance;

c.arcs[n][m].adj =c.arcs[m][n].adj ;

}

}

return 1;

}//newgraph

// 8. 增加一条边。返回值:1

int enarc(mgraph&c)

{

int m, n, distance;

printf("\n请输入边的起点和终点编号,权值:");

scanf("%d %d %d",&m,&n,&distance);

while(m<0||m>c.vexnum ||n<0||n>c.vexnum )

{

printf("输入错误,请重新输入:");

scanf("%d %d",&m,&n);

}

if(locatevex(c,m)<0)

{

printf("此结点%d已删除",m);

return 1;

}

if(locatevex(c,n)<0)

{

printf("此结点%d已被删除:",n);

return 1;

}

c.arcs[m][n].adj =distance;

c.arcs[n][m].adj =c.arcs[m][n].adj; //对称赋值return 1;

}//enarc

20

数据结构课程设计参考题目

数据结构课程设计题目 数据结构课程设计题目(大题目).doc 一、公司销售管理系统 项目开发基本要求 1.客户信息管理:对客户的基本信息进行添加、修改和删除。 2.产品信息管理:对产品的基本信息进行添加、修改和删除。 3.供应商信息管理:对供应商的基本信息进行添加、修改和删除。 4.订单信息管理:对订单的基本信息进行添加、修改和删除。 二、高校科研管理系统 系统主要用于帮助高校或科研单位管理和维护各项科研相关资料 项目开发基本要求 1.系统用户管理模块:为系统新用户设置用户名及口令;操作员更改自己的系统口令。2.数据字典管理模块:管理项目性质包括:分为国家自然科学基金、863、部省科委及企业集团四种情况;范围包括:分为全国、国际、地方三种情况;检索源包括:分为EI、SCI、核心和一般四种情况。 3.项目参加人员管理模块包括:显示添加修改删除查询。 4.项目基本情况模块包括:显示添加修改删除查询。 5.项目获奖情况模块包括:显示添加修改删除查询。 6.期刊论文管理模块包括:显示添加修改删除查询。 7.著作管理模块包括:显示添加修改删除查询。 8.科研工作量统计模块:按照学校科研工作量计算办法,为每位科研人员进行科研工作量的计算和统计。 9.科研积分统计模块:按照学校科研积分计算办法,为每位科研人员进行科研计分的计算和统计。 三、网络五子棋对战 四、不同排序算法模拟 五、科学计算器 数据结构课程设计题目 1.运动会分数统计 任务:参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n< =20) 功能要求: 1)可以输入各个项目的前三名或前五名的成绩; 2)能统计各学校总分,

数据结构课程设计报告模板

《数据结构I》三级项目报告 大连东软信息学院 电子工程系 ××××年××月

三级项目报告注意事项 1. 按照项目要求书写项目报告,条理清晰,数据准确; 2. 项目报告严禁抄袭,如发现抄袭的情况,则抄袭者与被抄袭者均 以0分计; 3. 课程结束后报告上交教师,并进行考核与存档。 三级项目报告格式规范 1. 正文:宋体,小四号,首行缩进2字符,1.5倍行距,段前段后 各0行; 2. 图表:居中,图名用五号字,中文用宋体,英文用“Times New Roman”,位于图表下方,须全文统一。

目录 一项目设计方案 (3) 二项目设计分析 (4) 三项目设计成果 (4) 四项目创新创业 (5) 五项目展望 (6) 附录一:项目成员 (6) 附录二:相关代码、电路图等 (6)

一项目设计方案 1、项目名称: 垃圾回收 2、项目要求及系统基本功能: 1)利用数据结构的知识独立完成一个应用系统设计 2)程序正常运行,能够实现基本的数据增加、删除、修改、查询等功能3)体现程序实现算法复杂度优化 4)体现程序的健壮性 二项目设计分析 1、系统预期实现基本功能: (结合本系统预期具体实现,描述出对应基本要求(增、删、改、查等)的具体功能) 1. 2. 3. 4. 5. 6. 7. 2、项目模块功能描述 (基本分为组织实施组织、程序功能模块编写、系统说明撰写等。其中程序功能子模块实现) 模块一: 主要任务:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 模块二: 主要任务:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 模块n: 主要任务:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

数据结构实验总结报告

数据结构实验总结报告 一、调试过程中遇到哪些问题? (1)在二叉树的调试中,从广义表生成二叉树的模块花了较多时间调试。 由于一开始设计的广义表的字符串表示没有思考清晰,处理只有一个孩子的节点时发生了混乱。调试之初不以为是设计的问题,从而在代码上花了不少时间调试。 目前的设计是: Tree = Identifier(Node,Node) Node = Identifier | () | Tree Identifier = ASCII Character 例子:a(b((),f),c(d,e)) 这样便消除了歧义,保证只有一个孩子的节点和叶节点的处理中不存在问题。 (2)Huffman树的调试花了较长时间。Huffman编码本身并不难处理,麻烦的是输入输出。①Huffman编码后的文件是按位存储的,因此需要位运算。 ②文件结尾要刷新缓冲区,这里容易引发边界错误。 在实际编程时,首先编写了屏幕输入输出(用0、1表示二进制位)的版本,然后再加入二进制文件的读写模块。主要调试时间在后者。 二、要让演示版压缩程序具有实用性,哪些地方有待改进? (1)压缩文件的最后一字节问题。 压缩文件的最后一字节不一定对齐到字节边界,因此可能有几个多余的0,而这些多余的0可能恰好构成一个Huffman编码。解码程序无法获知这个编码是否属于源文件的一部分。因此有的文件解压后末尾可能出现一个多余的字节。 解决方案: ①在压缩文件头部写入源文件的总长度(字节数)。需要四个字节来存储这个信息(假定文件长度不超过4GB)。 ②增加第257个字符(在一个字节的0~255之外)用于EOF。对于较长的文件,

会造成较大的损耗。 ③在压缩文件头写入源文件的总长度%256的值,需要一个字节。由于最后一个字节存在或不存在会影响文件总长%256的值,因此可以根据这个值判断整个压缩文件的最后一字节末尾的0是否在源文件中存在。 (2)压缩程序的效率问题。 在编写压缩解压程序时 ①编写了屏幕输入输出的版本 ②将输入输出语句用位运算封装成一次一个字节的文件输入输出版本 ③为提高输入输出效率,减少系统调用次数,增加了8KB的输入输出缓存窗口 这样一来,每写一位二进制位,就要在内部进行两次函数调用。如果将这些代码合并起来,再针对位运算进行一些优化,显然不利于代码的可读性,但对程序的执行速度将有一定提高。 (3)程序界面更加人性化。 Huffman Tree Demo (C) 2011-12-16 boj Usage: huffman [-c file] [-u file] output_file -c Compress file. e.g. huffman -c test.txt test.huff -u Uncompress file. e.g. huffman -u test.huff test.txt 目前的程序提示如上所示。如果要求实用性,可以考虑加入其他人性化的功能。 三、调研常用的压缩算法,对这些算法进行比较分析 (一)无损压缩算法 ①RLE RLE又叫Run Length Encoding,是一个针对无损压缩的非常简单的算法。它用重复字节和重复的次数来简单描述来代替重复的字节。尽管简单并且对于通常的压缩非常低效,但它有的时候却非常有用(例如,JPEG就使用它)。 变体1:重复次数+字符 文本字符串:A A A B B B C C C C D D D D,编码后得到:3 A 3 B 4 C 4 D。

数据结构课程设计报告模板

课程设计说明书 课程名称:数据结构 专业:班级: 姓名:学号: 指导教师:成绩: 完成日期:年月日

任务书 题目:黑白棋系统 设计内容及要求: 1.课程设计任务内容 通过玩家与电脑双方的交替下棋,在一个8行8列的方格中,进行棋子的相互交替翻转。反复循环下棋,最后让双方的棋子填满整个方格。再根据循环遍历方格程序,判断玩家与电脑双方的棋子数。进行大小判断,最红给出胜负的一方。并根据y/n选项,判断是否要进行下一局的游戏。 2.课程设计要求 实现黑白两色棋子的对峙 开发环境:vc++6.0 实现目标: (1)熟悉的运用c语言程序编写代码。 (2)能够理清整个程序的运行过程并绘画流程图 (3)了解如何定义局部变量和整体变量; (4)学会上机调试程序,发现问题,并解决 (5)学习使用C++程序来了解游戏原理。 (6)学习用文档书写程序说明

摘要 本文的研究工作在于利用计算机模拟人脑进行下黑白棋,计算机下棋是人工智能领域中的一个研究热点,多年以来,随着计算机技术和人工智能技术的不断发展,计算机下棋的水平得到了长足的进步 该程序的最终胜负是由棋盘上岗双方的棋子的个数来判断的,多的一方为胜,少的一方为负。所以该程序主要运用的战术有削弱对手行动战术、四角优先战术、在游戏开局和中局时,程序采用削弱对手行动力战术,即尽量减少对手能够落子的位置;在游戏终局时则采用最大贪吃战术,即尽可能多的吃掉对手的棋子;而四角优先战术则是贯穿游戏的始终,棋盘的四角围稳定角,不会被对手吃掉,所以这里是兵家的必争之地,在阻止对手进角的同时,自己却又要努力的进角。 关键词:黑白棋;编程;设计

数据结构课程设计报告

《数据结构与算法》课程设计报告 学号: 班级序号: 姓名: 指导教师: 成绩: 中国地质大学信息工程学院地理信息系统系 2011年12 月

1.需求规格说明 【问题描述】 利用哈夫曼编码进行对已有文件进行重新编码可以大大提高减小文件大小,减少存储空间。但是,这要求在首先对一个现有文件进行编码行成新的文件,也就是压缩。在文件使用时,再对压缩文件进行解压缩,也就是译码,复原原有文件。试为完成此功能,写一个压缩/解压缩软件。 【基本要求】 一个完整的系统应具有以下功能: (1)压缩准备。读取指定被压缩文件,对文件进行分析,建立哈夫曼树,并给出分析结果(包括数据集大小,每个数据的权值,压缩前后文件的大小),在屏幕上输出。 (2)压缩。利用已建好的哈夫曼树,对文件进行编码,并将哈夫曼编码及文件编码后的数据一起写入文件中,形成压缩文件(*.Haf)。 (3)解压缩。打开已有压缩文件(*.Haf),读取其中的哈夫曼编码,构建哈夫曼树,读取其中的数据,进行译码后,写入文件,完成解压缩。 (4)程序使用命令行方式运行 压缩命令:SZip A Test.Haf 1.doc 解压缩命令:SZip X Test.Haf 2.doc或SZip X Test.Haf 用户输入的命令不正确时,给出提示。 (5)使用面向对象的思想编程,压缩/解压缩、哈夫曼构建功能分别构建类实现。 2.总体分析与设计 (1)设计思想: 1、压缩准备:1> 读文件,逐个读取字符,统计频率 2> 建立哈夫曼树 3> 获得哈弗曼编码 2、压缩过程: 1> 建立一个新文件,将储存权值和字符的对象数组取存储在文件头

数据结构课程设计题目选择

数据结构课程设计题目 说明: (1)选用语言:C或Java语言; (2)需要注明3人(可少于3人)小组各自承担和完成的任务(据此给予成绩); (3)如下带“*”的题目,“*”越多,难度越大一些,分值权重更高---要得到更高分数,推荐选择。 要求: (1) 用中文给出设计说明书(含重要子函数的流程图); (2) 给出测试通过、能实现相应功能的源代码; (3) 测试报告。 0、小学数学四则混合运算试题出题、评价、题库自动生成与组卷系统(****)---已经有2组选择 任务: (1)将随机给出的四则混合运算表达式显示在计算机显示器上,要求应试者给出答案;并且使用堆栈对该表达式求值,同给出的答案进行比较,判断 正确和错误。给出鼓励信息和嘉奖信息; (2)保存多人在不同时间应试的题目与他(或她)给出的答案,评价所出题目的难易程度(通过多人回答正确与否的情况给出),形成题库; (3)按照用户给出的题目难易程度指标(例如让50人的得分满足怎样的正态分布,如90分以上10%,80分以上30%,70分以上30%,60分以上20%,60分 以下10%),从题库中抽取不同的题目,组成试卷。 要求:随机产生的题目中,参加运算的数据随机、运算符随机。题目涉及加减乘除,带括弧的混合运算;随时可以退出;保留历史分数,能回顾历史,给出与历史分数比较后的评价。 1、集合的并、交和差运算---已经有1组选择 任务:编制一个能演示执行集合的并、交和差运算的程序。 要求: (1) 集合的元素限定为小写字母字符[…a?..?z?] 。 (2) 演示程序以用户和计算机的对话方式执行。 实现提示:以链表表示集合。 选作内容: (1) 集合的元素判定和子集判定运算。 (2) 求集合的补集。 (3) 集合的混合运算表达式求值。 (4) 集合的元素类型推广到其他类型,甚至任意类型。 2、停车场管理------已经有2组选择 任务:设停车场是一个可以停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次有北向南排列(大门在最南端,最先到达的第一车停放在车场的最北端),若车场内已停满n辆车,那么后来的车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。 要求:以栈模拟停车场,以队列模拟车场外的便道。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停车不收费)。栈以顺序存储结构实现,队列以链表结构实现。 3、哈夫曼码的编/译码系统(**)---已经有1组选择

数据结构课程设计独立题目

题目2:运动会分数统计 1.问题描述 参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20) 2.功能要求 1)可以输入各个项目的前三名或前五名的成绩; 2)能统计各学校总分; 3)可以按学校编号、学校总分、男女团体总分排序输出; 4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。 存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。 。 题目6:哈夫曼编/译码器 1.问题描述 利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站写一个哈夫曼编/译码系统。 2.功能要求 I:初始化(Initialization)。从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmTree中。 E:编码(Encoding)。利用已建好的哈夫曼树(如不在内存,则从文件htmTree 中读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile 中。 D:译码(Decoding)。利用已建好的哈夫曼树将文件CodeFile中的代码进行译码,结果存入文件TextFile中。 P:印代码文件(Print)。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码写入文件CodePrint中。 T:印哈夫曼树(Tree Printing)。将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint 中。 题目9:构造可以使n个城市连接的最小生成树 1.问题描述 给定一个地区的n个城市间的距离网,用Prim算法或Kruskal算法建立最小生成树,并计算得到的最小生成树的代价。 2.功能要求 城市间的距离网采用邻接矩阵表示,邻接矩阵的存储结构定义采用课本中给出的定义,若两个城市之间不存在道路,则将相应边的权值设为自己定义的无穷大值。要求在屏幕上显示得到的最小生成树中包括了哪些城市间的道路,并显示得到的最小生成树的代价。

数据结构课程设计报告模板

数据结构课程设计报告模板

课程设计说明书 课程名称:数据结构 专业:班级: 姓名:学号: 指导教师:成绩: 完成日期:年月日

任务书 题目:黑白棋系统 设计内容及要求: 1.课程设计任务内容 通过玩家与电脑双方的交替下棋,在一个8行8列的方格中,进行棋子的相互交替翻转。反复循环下棋,最后让双方的棋子填满整个方格。再根据循环遍历方格程序,判断玩家与电脑双方的棋子数。进行大小判断,最红给出胜负的一方。并根据y/n选项,判断是否要进行下一局的游戏。 2.课程设计要求 实现黑白两色棋子的对峙 开发环境:vc++6.0 实现目标: (1)熟悉的运用c语言程序编写代码。 (2)能够理清整个程序的运行过程并绘画流程图 (3)了解如何定义局部变量和整体变量; (4)学会上机调试程序,发现问题,并解决 (5)学习使用C++程序来了解游戏原理。 (6)学习用文档书写程序说明

目录 1.引言 (1) 2.课题分析 (4) 3.具体设计过程 (5) 3.1设计思路 (5) 3.2程序设计流程图 (5) 3.3.函数实现说明 (10) 4.程序运行结果 (12) 5.软件使用说明 (16) 6.结论 (19) 参考文献 (20) 附录:源代码 (21)

1.引言 数据结构在计算机科学界至今没有标准的定义。个人根据各自的理解的不同而有不同的表述方法: Sartaj Sahni在他的《数据结构、算法与应用》一书中称:“数据结构是数据对象,以及存在于该对象的实例和组成实例的数据元素之间的各种联系。这些联系可以通过定义相关的函数来给出。”他将数据对象(data object)定义为“一个数据对象是实例或值的集合”。Clifford A.Shaffer在《数据结构与算法分析》一书中的定义是:“数据结构是ADT(抽象数据类型Abstract Data Type)的物理实现。” Lobert L.Kruse在《数据结构与程序设计》一书中,将一个数据结构的设计过程分成抽象层、数据结构层和实现层。其中,抽象层是指抽象数据类型层,它讨论数据的逻辑结构及其运算,数据结构层和实现层讨论一个数据结构的表示和在计算机内的存储细节以及运算的实现。数据结构具体指同一类数据元素中,各元素之间的相互关系,包括三个组成成分,数据的逻辑结构,数据的存储结构和数据运算结构。 1.1. 重要意义 一般认为,一个数据结构是由数据元素依据某种逻辑联系组织起来的。对数据元素间逻辑关系的描述称为数据的逻辑结构;数据必须在计算机内存储,数据的存储结构是数据结构的实现形式,是其在计算机内的表示;此外讨论一个数据结构必须同时讨论在该类数据上执行的运算才有意义。 在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。许多时候,确定了数据结构后,算法就容易得到了。有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。不论哪种情况,选择合适的数据结构都是非常重要的。 选择了数据结构,算法也随之确定,是数据而不是算法是系统构造的关键因素。这种洞见导致了许多种软件设计方法和程序设计语言的出现,面向对象的程序设计语言就是其中之一。 1.2. 研究内容

数据结构课程设计题目及要求

实验一~实验四任选一题;实验五~实验九任选一题。 实验一运动会分数统计 一、实验目的: (1)熟练掌握线性表的两种存储方式 (2)掌握链表的操作和应用。 (3)掌握指针、结构体的应用 (4)按照不同的学校,不同项目和不同的名次要求,产生各学校的成绩单、团体总分报表。 二、实验内容: 【问题描述】 参加运动会的n个学校编号为1~n。比赛分成m个男子项目和w个女子项目,项目编号分别为1~m和m+1~m+w。由于各项目参加人数差别较大,有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5,3,2。写一个统计程序产生各种成绩单和得分报表。 【基本要求】 产生各学校的成绩单,内容包括各校所取得的每项成绩的项目号、名次(成绩)、姓名和得分;产生团体总分报表,内容包括校号、男子团体总分、女子团体总分和团体总分。 【测试数据】 对于n=4,m=3,w=2,编号为奇数的项目取前五名,编号为偶数的项目取前三名,设计一组实例数据。 【实现提示】 可以假设m≤20,m≤30,w≤20,姓名长度不超过20个字符。每个项目结束时,将其编号、类型符(区分取前五名还是前三名)输入,并按名次顺序输入运动员姓名、校名(和成绩)。 【选作内容】 允许用户指定某些项目可采取其他名次取法。

实验二停车场管理 一、实验目的: (1)熟练掌握栈顺存和链存两种存储方式。 (2)掌握栈的基本操作及应用。 (3)以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。 二、实验内容: 【问题描述】 设停车场是一个可停放n辆汽车的长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车信放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场院,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。 【基本要求】 以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。 【测试数据】 设n=2,输入数据为:(A,1,5),(A,1,15),(A,3,20),(A,4,25),(A,5,30),(D,2,35),(D,4,40),(E,0,0)。其中:A表示到达(Arrival);D表示离去(Departure);E表示输入结束(End)。 【实现提示】 需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照号码和进入停车场的时刻。 【选作内容】 (1)两个栈共享空间,思考应开辟数组的空间是多少? (2)汽车可有不同种类,则他们的占地面积不同收费标准也不同,如1辆客车和1.5辆小汽车的占地面积相同,1辆十轮卡车占地面积相当于3辆小汽车的占地面积。(3)汽车可以直接从便道开走,此时排在它前面的汽车要先开走让路,然后再依次排到队尾。 (4)停放在便道上的汽车也收费,收费标准比停放在停车场的车低,请思考如何修改结构以满足这种要求。

数据结构课程设计题目

《数据结构》课程设计题目 1. 排序算法的性能分析 问题描述 设计一个测试程序,比较几种内部排序算法的关键字比较次数和移动次数以取得直观感受。 基本要求 (1)对冒泡排序、直接排序、选择排序、箱子排序、堆排序、快速排序及归并排序算法进行比较。 (2)待排序表的表长不小于100,表中数据随机产生,至少用5组不同数据作比较,比较指标:关键字参加比较次数和关键字的移动次数(关键字交换记为3次移动)。 (3)输出比较结果。 选做内容 (1)对不同表长进行比较。 (2)验证各算法的稳定性。 (3)输出界面的优化。 2. 排序算法思想的可视化演示—1 基本要求 排序数据随机产生,针对随机案例,对冒泡排序、箱子排序、堆排序、归并算法,提供排序执行过程的动态图形演示。 3. 排序算法思想的可视化演示—2 基本要求 排序数据随机产生,针对随机案例,,对插入排序、选择排序、基数排序、快速排序算法,提供排序执行过程的动态图形演示。 4. 线性表的实现与分析 基本要求 ①设计并实现线性表。 ②线性表分别采取数组(公式化描述)、单链表、双向链表、间接寻址存储方 式 ③针对随机产生的线性表实例,实现线性表的插入、删除、搜索操作动态演示(图 形演示)。 5. 等价类实现及其应用 问题描述:某工厂有一台机器能够执行n个任务,任务i的释放时间为r i(是一个整数),最后期限为d i(也是整数)。在该机上完成每个任务都需要一个单元的时间。一种可行的调

度方案是为每个任务分配相应的时间段,使得任务i的时间段正好位于释放时间和最后期限之间。一个时间段不允许分配给多个任务。 基本要求: 使用等价类实现以上机器调度问题。 等价类分别采取两种数据结构实现。 6. 一元稀疏多项式计算器 问题描述 设计一个一元稀疏多项式简单计算器。 基本要求 一元稀疏多项式简单计算器的基本功能是: (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,…,c n,e n,其中n是多项式的项数,c i,e i,分别是第i项的系数和指数,序列按指数降序排序; (3)多项式a和b相加,建立多项式a+b; (4)多项式a和b相减,建立多项式a-b; (5)计算多项式在x处的值; (6)计算器的仿真界面(选做) 7. 长整数的代数计算 问题描述 应用线性数据结构解决长整数的计算问题。设计数据结构完成长整数的表示和存储,并编写算法来实现两长整数的加、减、乘、除等基本代数运算。 基本要求 ①长整数长度在一百位以上。 ②实现两长整数在取余操作下的加、减、乘、除操作,即实现算法来求解a+b mod n, a-b mod n, a?b mod n, a÷b mod n。 ③输入输出均在文件中。 ④分析算法的时空复杂性。 8. 敢死队问题。 有M个敢死队员要炸掉敌人的一碉堡,谁都不想去,排长决定用轮回数数的办法来决定哪个战士去执行任务。如果前一个战士没完成任务,则要再派一个战士上去。现给每个战士编一个号,大家围坐成一圈,随便从某一个战士开始计数,当数到5时,对应的战士就去执行任务,且此战士不再参加下一轮计数。如果此战士没完成任务,再从下一个战士开始数数,被数到第5时,此战士接着去执行任务。以此类推,直到任务完成为止。排长是不愿意去的,假设排长为1号,请你设计一程序,求出从第几号战士开始计数才能让排长最后一个留下来而不去执行任务。 要求:至少采用两种不同的数据结构的方法实现。 9. 简单计算器

数据结构课程设计报告模板2013

课程设计(论文)任务书 学院专业班 一、课程设计(论文)题目 二、课程设计(论文)工作自年月日起至年月日止。 三、课程设计(论文) 地点: 四、课程设计(论文)内容要求: 1.课程设计的目的 为了配合《数据结构》课程的教学,使学生能更深刻的领会《数据结构》课程的重要性,特开设此课程设计;编写一些在特定数据结构上的算法,通过上机调试,更好的掌握各种数据结构及其特点,培养学生综合运用所学理论知识解决复杂实际问题的实践能力、研究性学习能力和团队合作能力。 2.课程设计的任务及要求 1)基本要求 (1)课程设计前必须选定课程设计题目,并认真进行需求分析与系统设计; (2)上机调试之前要认真准备实验程序及调试时所需的测试数据; (3)独立思考,独立完成,严禁抄袭,调试过程要规范,认真记录调试结果; (4)上机结束后认真规范撰写课设报告,对设计进行总结和讨论。 2)课程设计论文编写要求 (1)要按照书稿的规格撰写打印课设论文 (2)论文包括任务书、目录、绪论、正文、总结、参考文献、附录等 (3)正文中要有问题描述、抽象数据类型的定义、数据的存储结构、设计的求解算法、算法的实现、调试分析与测试结果 (4)课设论文装订按学校的统一要求完成 3)课设考核 从以下几方面来考查: (1)考勤和态度; (2)任务的难易程度及设计思路;

(3)动手调试能力; (4)论文撰写的水平、格式的规范性。 4)参考文献 [1] 严蔚敏, 吴伟民. 数据结构(C语言版)[M]. 北京:清华大学出版社, 2007年. [2] 严蔚敏, 吴伟民. 数据结构题集(C语言版)[M]. 北京:清华大学出版社, 2007年. [3] 谭浩强. C语言程序设计[M]. 北京:清华大学出版社,2006年. 5)课程设计进度安排 内容天数地点 构思及收集资料1图书馆 程序设计与调试3计算机房 撰写论文1图书馆 6)任务及具体要求 (此处填写任务书中自已所选题目的要求) 学生签名:亲笔签名 年月日 课程设计(论文)评审意见 (1)考勤和态度:优()、良()、中()、一般()、差()(2)任务难易及设计思路:优()、良()、中()、一般()、差()(3)动手调试能力评价:优()、良()、中()、一般()、差()(4)论文撰写水平及规范性评价:优()、良()、中()、一般()、差() 评阅人:职称:讲师 年月日

数据结构课程设计报告

编号 课程设计 题目 1、一元稀疏多项式计算器 2、模拟浏览器操作程序 3、背包问题的求解 4、八皇后问题 二级学院计算机科学与工程学院 专业计算机科学与技术 班级 2011级 37-3班 学生姓名 XX 学号 XXXXXXXXXX 指导教师 XXXXX 评阅教师 时间 1、一元稀疏多项式计算器 【实验内容】 一元稀疏多项式计算器。

【问题描述】 设计一个一元稀疏多项式简单计算器。 【需求分析】 其基本功能包括: (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列为:n,c1,e1,c2,e2,……,cn,en,其中n 是多项式的项数,ci,ei分别是第i项的系数和指数,序列按指数降序排序;(3)多项式a和b相减,建立多项a+b; (4)多项式a和b相减,建立多项式a-b; (5)计算多项式在x处的值; (6)计算器的仿真界面(选做); 【概要设计】 -=ADT=- { void input(Jd *ha,Jd *hb); void sort(dnode *h)

dnode *operate(dnode *a,dnode *b) float qiuzhi(int x,dnode *h) f",sum); printf("\n"); } 【运行结果及分析】 (1)输入多项式:

(2)输出多项式(多项式格式为:c1x^e1+c2x^e2+…+cnx^en): (3)实现多项式a和b相加: (4)实现多项式a和b相减: (5)计算多项式在x处的值:

2、模拟浏览器操作程序 【实验内容】 模拟浏览器操作程序 【问题描述】 标准Web浏览器具有在最近访问的网页间后退和前进的功能。实现这些功能的一个方法是:使用两个栈,追踪可以后退和前进而能够到达的网页。在本题中,要求模拟实现这一功能。 【需求分析】 需要支持以下指令: BACK:将当前页推到“前进栈”的顶部。取出“后退栈”中顶端的页面,使它成为当前页。若“后退栈”是空的,忽略该命令。 FORWARD:将当前页推到“后退栈”的顶部。取出“前进栈”中顶部的页面,使它成为当前页。如果“前进栈”是空的,忽略该命令。 VISIT:将当前页推到“后退栈”的顶部。使URL特指当前页。清空“前进栈”。 QUIT:退出浏览器。 假设浏览器首先加载的网页URL是:http:

数据结构课程设计题目表

《数据结构》课程设计课题表 课题1:设计出链表结构的相关函数库,以便在程序设计中调用。要求: (1)包括线性表的各种基本函数以及常用函数(自己确定函数、函数形式及理由)。 (2)最好能借助语言环境实现图形显示功能,以便能将抽象的数据结构以图形方式显示出来,将复杂的运行过程以动态方式显示出来。 (3)给出若干例程,演示通过调用自己的库函数来实现相关问题的求解。 课题2:设计出顺序表结构的相关函数库,以便在程序设计中调用。要求: (1)包括线性表的各种基本函数以及常用函数(自己确定函数、函数形式及理由)。 (2)最好能借助语言环境实现图形显示功能,以便能将抽象的数据结构以图形方式显示出来,将复杂的运行过程以动态方式显示出来。 (3)给出若干例程,演示通过调用自己的库函数来实现相关问题的求解。 课题3:设计程序以实现任意两个高次多项式的加法和乘法运算。 要求: (1)所设计的数据结构应尽可能节省存储空间。 (2)程序的运行时间应尽可能少。 课题4:设计一个模拟计算器的程序,要求能对包含加、减、乘、除、括号运算符及SQR和ABS函数的任意整型表达式进行求解。 要求:要检查有关运算的条件,并对错误的条件产生报警。 课题5:设计出二叉链表结构的相关函数库,以便在程序设计中调用。要求: (1)包括二叉树的各种基本函数以及常用函数(自己确定函数、函数形式及理由)。 (2)最好能借助语言环境实现图形显示功能,以便能将抽象的数据结构以图形方式显示出来,将复杂的运行过程以动态方式显示出来。 (3)给出若干例程,演示通过调用自己的库函数来实现相关问题的求解。 课题6:设计出树结构的相关函数库,以便在程序设计中调用。要求: (1)包括树结构的存储结构及各种基本函数以及常用函数(自己确定函数、函数形式及理由)。 (2)最好能借助语言环境实现图形显示功能,以便能将抽象的数据结构以图形方式显示出来,将复杂的运行过程以动态方式显示出来。 (3)给出若干例程,演示通过调用自己的库函数来实现相关问题的求解。 课题7:选择合适的存储结构表示广义表,并能实现下列运算要求: (1)用大写字母表示广义表,用小写字母表示原子,并提供设置广义表的值的功能。 (2)取广义表L的表头和表尾的函数head(L)和tail(L)。

数据结构课程设计报告

山东建筑大学 课程设计成果报告 题目: 1.数组实现两个矩阵的相乘运算 2.成绩分析问题 课程:数据结构A课程设计 院(部):管理工程学院 专业:信息管理与信息系统 班级:信管*** 学生姓名:*** 学号:******** 指导教师:******* 完成日期:2016年12月29日

目录 目录 (2) 一、课程设计概述 (3) 二、课程设计题目一 (3) 用数组实现两个矩阵的相乘运算 (3) 2.1[问题描述] (3) 2.2[要求及提示]: (3) 2.3[详细设计] (4) 2.4[调试分析] (5) 2.5[运行结果及分析] (5) 三、课程设计题目二 (6) 成绩分析问题 (6) 3.1[问题描述] (6) 3.2[概要设计] (6) 3.3[存储结构] (7) 3.4[流程图] (7) 3.5[详细设计] (8) 3.6[调试分析] (8) 3.7[运行结果及分析] (22) 四、参考文献: (25)

一、课程设计概述 本次数据结构课程设计共完成两个题:用数组实现两个矩阵相乘运算、成绩分析问题。使用语言:C 编译环境:vc6.0 二、课程设计题目一 用数组实现两个矩阵的相乘运算 2.1[问题描述] #include “stdio.h” int r[6][6]; void mult(int a[6][6] , int b[6][6]){ } main(){ int i,j; int num1[6][6],num2[6][6]; printf(“请输入第一个矩阵的值:”,); for(i=1;i<=6;i++) for(j=1;j<=6;j++) scanf(“%d”,&num1[i][j]); printf(“请输入第二个矩阵的值:”,); for(i=1;i<=6;i++) for(j=1;j<=6;j++) scanf(“%d”,&num2[i][j]); mult(num1,num2); printf(“\n两个矩阵相乘后的结果为:”); for(i=1;i<=6;i++) {for(j=1;j<=6;j++) printf(“%4d”,r[i][j]); printf(“\n”); } } 2.2[要求及提示]: 1、要求完善函数mult( ),

数据结构课程设计报告

数据结构课程设计 设计说明书 TSP 问题 起止日期:2016 年 6 月27 日至2016 年7 月 1 日 学生姓名 班级 学号 成绩 指导教师( 签字) 2016 年7 月 1 日

目录 第1 章需求分析.................................................................................1... 1.1 简介 (1) 1.2 系统的开发背景 (1) 1.3 研究现状 (1) 第2 章概要设计.................................................................................2... 2.1 系统开发环境和技术介绍 (2) 2.2 系统需求分析 (2) 2.2.1 总体功能分析 (2) 2.2.2 核心功能分析 (3) 第3 章详细设计...................................................................................4... 3.1 系统开发流程 (4) 3.2 系统模块设计 (4) 3.3 系统结构 (6) 3.2 系统流程图 (6) 第4 章调试分析...................................................................................7... 4.1 程序逻辑调试 (7) 4.2 系统界面调试 (8) 第5 章测试结果...................................................................................9... 5.1 测试环境 (9) 5.2 输入输出测试项目 (9) 5.3 测试结果 (10) 结论.....................................................................................................1..1.. 参考文献................................................................................................1..1. 附录.......................................................................................................1..2..

关于数据结构课程设计心得体会范文

关于数据结构课程设计心得体会范文 心得体会是指一种读书、实践后所写的感受性文字。是指将学习的东西运用到实践中去,通过实践反思学习内容并记录下来的文字,近似于经验总结。下面是小编搜集的关于数据结构课程设计心得体会范文,希望对你有所帮助。 关于数据结构课程设计心得体会(1) 这学期开始两周时间是我们自己选题上机的时间,这学期开始两周时间是我们自己选题上机的时间,虽然上机时间只有短短两个星期但从中确实学到了不少知识。上机时间只有短短两个星期但从中确实学到了不少知识。 数据结构可以说是计算机里一门基础课程,据结构可以说是计算机里一门基础课程,但我觉得我们一低计算机里一门基础课程定要把基础学扎实,定要把基础学扎实,然而这次短短的上机帮我又重新巩固了 c 语言知识,让我的水平又一部的提高。数据结构这是一门语言知识让我的水平又一部的提高。数据结构这是一门知识,纯属于设计的科目,它需用把理论变为上机调试。 纯属于设计的科目,它需用把理论变为上机调试。它对我们来说具有一定的难度。它是其它编程语言的一门基本学科。来说具有一定的难度。它是其它编程语言的一门基本学科。我选的上机题目是交叉合并两个链表,对这个题目,我选的上机题目是交叉合并两个链表,对这个题目,我觉得很基础。刚开始调试代码的时候有时就是一个很小的错觉得很基础。 刚开始调试代码的时候有时就是一个很小的错调试代码的时候误,导致整个程序不能运行,然而开始的我还没从暑假的状导致整个程序不能运行,态转到学习上,每当程序错误时我都非常焦躁,态转到学习上,每当程序错误时我都非常焦躁,甚至想到了放弃,但我最终找到了状态,一步一步慢慢来,放弃,但我最终找到了状态,一步一步慢慢来,经过无数次的检查程序错误的原因后慢慢懂得了耐心是一个人成功的必然具备的条件! 同时,通过此次课程设计使我了解到,必然具备的条件! 同时,通过此次课程设计使我了解到,硬件语言必不可缺少,要想成为一个有能力的人,必须懂得件语言必不可缺少,要想成为一个有能力的人,硬件

数据结构课程设计题目

数据结构课程设计 一、考核方法和容 根据课程设计过程中学生的学生态度、题目完成情况、课程设计报告书的质量和回答问题的情况等按照10%、40%、30%、20%加权综合打分。成绩评定实行优秀、良好、中等、及格和不及格五个等级。 评分标准: 优秀:答辩所有问题都能答出+报告良好 或报告良好+实现“提高部分”的功能; 良好:答辩所有问题都能答出+报告一般; 或报告一般+实现“提高部分”的功能; 中等:答辩大部分问题能答出+报告良好; 及格:答辩大部分问题能答出+报告一般; 以下四种,都不及格: 1)答辩几乎答不出问题; 2)报告几乎都是代码; 3)雷同部分达到60%; 4)课设报告与数据结构和c/c++关联不大。 课设报告的装订顺序如下: 任务书(签名,把题目要求贴在相应位置,注意下划线)-----目录(注意目录的格式,页码)-----1、设计任务(题目要求)-----2、需求分析(准备选用什么数据逻辑结构?数据元素包含哪些属性?需要哪些函数?为什么要这样设计?最后列出抽象数据类型定义)-----3、系统设计(设计实现抽象数据类型,包含选择什么物理存储方式?数据元素的结构体或类定义,以及各函数的设计思路,算法,程序流程图等)----4、编码实现(重要函数的实现代码)-----5、调试分析(选择多组测试数据、运行截图、结果分析)-----6、课设总结(心得体会)-----7、谢辞-----8、参考文献; 课设报告打印要求: B5纸打印,报告总页数控制在10—15页,报告中不能全是代码,报告中代码总量控制在3页。版式:无页眉,有页码,页码居中 字号:小四,单倍行距 字体:宋体+Times new Romar 截图:截图要配图的编号和图的题目,如:“图1 Insert函数流程图” 二、课程设计的题目 1.长整数的加法运算 2.通讯录管理系统的设计与实现——顺序表 3.广义表的应用 4.学生成绩管理系统的设计与实现 5.家谱管理系统的设计与实现

数据结构课程设计报告模板

数据结构课程设计报告模板 成绩 计算机与信息工程学院 专业名称信息与计算科学 学生班级 10 级1班 学生姓名刘远远 学生学号 2010025707 设计起止时间: 2012年12月17日至 2012年12月21日 课程设计任务书 一、课程设计题目: 线性表的应用(大数运算) 二、课程设计目的与要求: 1、课程设计目的 (1)对数据结构中线性结构的理解和掌握; (2)熟练掌握顺序和链式存储结构有关知识和方法; (3)深入掌握各种数据结构的理论知识和实践操作; (4) 养成良好的编程风格,掌握各种数据结构的编程思想和编程方法; (5)将数据结构的理论知识和实践有机结合起来,为后续知识的学习 做好准备。 2、课程设计要求 (1) 选择合适的存储结构实现大数存储; (2) 设计算法,采用顺序存储结构完成大数的阶乘运算; (3) 设计算法,采用链式存储结构完成大数的加法运算; (4) 设计算法,选择合适的存储结构完成大数的乘法运算;

(5) 其中某一算法采用两种存储结构实现。三、工作计划: 第一阶段(12月17日,12月18日): 查阅各种数据结构相关资料书籍,整理出课程设计初步模型,并形成 课程设计的整体理论框架,理论模型 ; 第二阶段(12月19日,12月21日): 在DEV-C++5或TURBOC2相关开发语言上,进行编码、上机调试, 逐步形成完善的设计程序,使其达到上机完善演示出系统性的课程设计。 四、课程设计提交的文件: (1) 课程设计报告 (2) 课程设计可运行程序(刻录成光盘) 指导教师: 张绍兵 2012 年 12 月 1日 2 线性表有两种不同的存储结构,分别是顺序存储结构和链式存储结构,在实际中应用十分广泛。本设计要求分别利用线性表的两种存储结构,设计算法完成对大数的阶乘、加法、乘法的求解。 数据结构是一门研究非数值计算的程序设计问题中的操作对象以及它们之间的关系的操作的学科,在本次课程设计中,定义存储结构均采用了数据结构中的抽象数据类型,而抽象数据类型是指一个数据模型以及定义在改模型上的一组操作,抽象数据类型的定义仅仅取决于它的一组逻辑特性,而与计算机内部如何表示和实现无关,即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部的使用。选择合适存储结构实现大数运算。首先需要先解释的是这里大数计算的因数和结果精度一般是少则数十位,多则几万位。在C语言中定义的类型中精度最多只有二十多位,因而在此我们采取用线性表的顺序和链表存储结构的方式来存放大数,

相关文档
最新文档