数据结构与算法设计报告

合集下载

数据结构实践课程报告

数据结构实践课程报告

算法设计实践课程报告学院:计算机学院班级:学号:姓名:一、课程目的本课程设计为培养学生综合实践的能力,理论知识和实际有机的结合起来,锻炼学生实际分析问题和解决问题的能力,提高学生适应实际、实践编程的能力,使对C++系统编程有一个深入的了解。

二、题目3. 校园导游程序——最短路径应用问题描述:用无向网表示你所在学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。

要求能够回答有关景点介绍、游览路径等问题。

基本要求:实现一简单的功能查询界面:(1)查询各景点的相关信息;(2)选定某一景点作为起始点,可查询从该景点出发到其余各景点的最佳游览路径。

三、算法分析与设计首先,此算法建立了类mgraph,通过邻接矩阵存储校园景点图,并通过构造函数初始化图,手动给校园图附上相关信息(包括景点编号、名称、简介、路径及路径长度等)。

然后,手动绘制了部分模拟校园图。

该函数包括深度优先遍历图和迪杰斯特拉最短路径算法,主要功能是实现校园七个景点(0.图书馆,1.三山楼,2.三江楼,3.教工浴室,4.西山操场,5.西山美食城,6.京江操场)的简介和最短路径的算法,最后用主函数输出结果,用switch语句分别输出,最后求出两点之间的最短路径。

四、运行结果及分析输出结果:五、总结这个程序在调试时,我发现一次只能查找一个景点的相关介绍,之后的最短路径的计算生成时是成功的,但在调试时却不是很好,输出结果有误。

通过这次算法设计实践,我对数据结构的运用有了更深的体会,对无向图和创建无向图的理解更加深刻,理解了迪杰斯特拉算法的原理,不再是盲目地照搬书上的程序。

之后,我还发现了我的不足之处,对程序的设计还不过灵活。

附录:源程序清单#include<iostream>#include<string>using namespace std;const int maxsize=100;class mgraph{public:mgraph(string a[],int n,int e);//构造函数,建立n个顶点,e条边的图~mgraph(){} //析构函数void dfstraverse(int v);//深度优先遍历void shortpath(mgraph g,int v,int r);//求v到其余各个顶点的最短路径private:string vertex[maxsize];//存放图中顶点的数组int arc[maxsize][maxsize];//存放图中边的数组int vertexnum,arcnum;//图中的顶点数和边数};mgraph::mgraph(string a[],int n,int e){int i,j,k;vertexnum=n;arcnum=e;for( i=0;i<vertexnum;i++)vertex[i]=a[i];for(i=0;i<vertexnum;i++) //初始化邻接矩阵for(j=0;j<vertexnum;j++)arc[i][j]=0;for(k=0;k<arcnum;k++)//依次输入每一条边{cout<<"请输入两个景点的编号:"<<endl;cin>>i>>j;//依次输入边依附的两个顶点的编号和距离if(i<7&&j<7)arc[i][j]=arc[j][i]=1;//置有边标志else cout<<"没有该景点!!!"<<endl;}}void mgraph::shortpath(mgraph g,int v,int r){for (int i = 0; i < vertexnum; i++)for (int j = 0; j < vertexnum; j++){arc[i][j] = 1000000;//初始化路径长度}arc[0][1]=arc[1][0]=10;arc[1][2]=arc[2][1]=5;arc[2][3]=arc[3][2]=8;arc[0][4]=arc[4][0]=15;arc[1][4]=arc[4][1]=9;arc[2][4]=arc[4][2]=10;arc[3][4]=arc[4][3]=11;arc[4][5]=arc[5][4]=12;arc[0][5]=arc[5][0]=10;arc[0][6]=arc[6][0]=14;arc[5][6]=arc[6][5]=9;int dist[maxsize]={0},s[maxsize];string path[maxsize];int k,i;for( i=0;i<g.vertexnum;i++){dist[i]=g.arc[v][i]; //初始化数组dist[n],path[n]if(dist[i]<10000)path[i]=g.vertex[v]+g.vertex[i];else path[i]="";}s[0]=v;//初始化集合sdist[v]=0;//标记顶点v为源点int num=1;while(num<g.vertexnum)//当顶点数num小于图的顶点数{for( k=0,i=0;i<g.vertexnum;i++)//在dist中查找最小值元素if((dist[i]!=0)&&(dist[i]<dist[k]))k=i;s[num++]=k;//将新生成的终点加入集合sfor(i=0;i<g.vertexnum;i++)//修改数组dist和pathif(dist[i]>dist[k]+g.arc[k][i]){dist[i]=dist[k]+g.arc[k][i];path[i]=path[k]+g.vertex[i];}}cout<<"路径长度为:"<<dist[k]<<"路径为:"<<path[k];}int main(){int aa,x,y;cout<<"欢迎进入江苏大学校园导游系统!!"<<endl;cout<<"0.图书馆,1.三山楼,2.三江楼,3.教工浴室,4.西山操场,5.西山美食城,6.京江操场"<<endl;string a[7]={"0","1","2","3","4","5","6"};string b[7]={"图书馆","三山楼","三江楼","教工浴室","西山操场","西山美食城","京江操场"};string c[7]={"图书馆:本建筑共有5层,有大量图书可供学生查阅,还可在其中自习","三山楼:2号教学楼,共8层,平时上课地点","三江楼:1号教学楼,共18层,平时上课地点","教工浴室:周二至周日开放,开放时间:14:00至20:00","西山操场:早操地点,平时自由锻炼的地方,每晚有大量人跑步","西山美食城:有大量美食可供选择,物美价廉","京江操场:位于六食堂附近,规模比西山操场略小"};mgraph tu(a,7,1);cout<<"主要景点平面图:"<<endl;cout<<" 京江操场* * * * * * * 六食堂"<<endl;cout<<" * * "<<endl;cout<<" * * "<<endl;cout<<" * * "<<endl;cout<<" * * "<<endl;cout<<" * * "<<endl;cout<<" * * * *西山美食城* * * * "<<endl;cout<<" * * * * "<<endl;cout<<" * * * * "<<endl;cout<<" * * * * "<<endl;cout<<" * * * 西山操场* *老一区* "<<endl;cout<<" * * * * * "<<endl;cout<<" * * * * * * * * * * * * * * *教工浴室"<<endl;cout<<" * * * * * "<<endl;cout<<" * * * * * "<<endl;cout<<"* * * * *东山操场* * * "<<endl;cout<<"* * * * "<<endl;cout<<"* * * * 图书馆* * * * * * * * * * * * * * * "<<endl;cout<<" * * * "<<endl;cout<<" * * * * * * * * * * * * * *三山楼 * * * *三江楼"<<endl;cout<<"请输入您想要了解的景点编号:";cin>>aa;switch(aa){case 0:cout<<"此景点为:"<<b[0]<<"\n简介:"<<c[0]<<endl;break;case 1:cout<<"此景点为:"<<b[1]<<"\n简介:"<<c[1]<<endl;break;case 2:cout<<"此景点为:"<<b[2]<<"\n简介:"<<c[2]<<endl;break;case 3:cout<<"此景点为:"<<b[3]<<"\n简介:"<<c[3]<<endl;break;case 4:cout<<"此景点为:"<<b[4]<<"\n简介:"<<c[4]<<endl;break;case 5:cout<<"此景点为:"<<b[5]<<"\n简介:"<<c[5]<<endl;break;case 6:cout<<"此景点为:"<<b[6]<<"\n简介:"<<c[6]<<endl;break;default:cout<<"您好,请输入编号为0-6的数字"<<endl;}cout<<"请输入当前所在景点的编号:";cin>>x;cout<<"请输入您要前往的景点编号:"<<endl;cin>>y;cout<<"最短路径为:"<<endl;tu.shortpath(tu,y,x);cout<<"祝大家旅途愉快!!!"<<endl;return 0;}。

汽车牌照的排序与查找问题-数据结构与算法课程设计报告

汽车牌照的排序与查找问题-数据结构与算法课程设计报告

合肥学院计算机科学与技术系课程设计报告2009 ~20010 学年第二学期课程数据结构与算法课程设计名称汽车牌照的排序与查找问题学生姓名闵晓龙学号**********专业班级08计本(2)班指导教师王昆仑20010年6月题目:汽车牌照的排序与查找问题,实现对汽车牌照按多关键字排序及快速查找。

其中汽车牌照有汉字、字母和数字混合排列,例如:皖A12345。

使用基数排序方法进行排序,并在排序的基础上,利用二分查找思想实现对汽车牌照按多关键字的查找。

一、问题分析和任务定义此程序要完成如下要求:选择一种数据结构来存储每个车辆的信息(如车主姓名,汽车等),在此基础上进行基数排序,而汽车牌照是由汉字、字母以及数字组成,即多关键字,其中字母和数字的比较是比较容易实现的,考虑到汉字的存储等各方面原因,对汉字的排序并不是很容易就能完成的,故不能直接对汉字排序。

经过分析可知,汽车牌照中的汉字是各个省市自治区的简称,共有34个。

这些汉字可以根据其汉语拼音的规则进行排序,然后预先存放到字符串数组中,这样每个汉字就对应着一个数组下标,只要对数组下标进行排序就可以实现对汉字的排序了。

在对车牌号进行查找时,先对车牌号进行排序,然后将车牌号中的汉字及字符均转换成一个长整形数据存储在一个预先定义的一个一维数组中并把需要查找的车牌号码也转换成一个长整型数据,然后在原先的一维数组中使用二分查找来查找该车牌号码对应的车辆信息。

二、数据结构的选择和概要设计1、数据结构的选择:程序要求实现对汽车牌照的排序与查找,而如果仅仅进行牌照的排序与查找,则显得程序没有太大的实用性,所以考虑在程序中加入例如车主的姓名以及车子的品牌等内容来增加程序的实用性。

为了能够更好的完成这些功能,在这里选用链表来存储所有车辆的信息,用链表中的单个节点来存储一辆汽车的信息,而对应的各个节点的域中则存储其对应的车辆信息(如车牌号码、车主姓名、车的品牌等信息)。

在存储汽车牌照中的汉字时,由于汉字在内存中占用两个字节,需要使用字符串数据来存储。

迷宫问题-数据结构与算法课程设计报告

迷宫问题-数据结构与算法课程设计报告

合肥学院计算机科学与技术系课程设计报告2008 ~2009 学年第二学期课程数据结构与算法课程设计名称迷宫问题学生名称陈建华专业班级08计本(2)班指导教师王昆仑2010年6月一、问题分析和任务定义1.题目:迷宫的生成与路由。

生成一个N*M(N行M列)的迷宫,0和1分别表示迷宫中的通路和障碍,设计一个程序,完成迷宫的组织与存储,并实现迷宫的路由算法。

即对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论2.设计要求:(1)N和M是用户可配置的,缺省值为50和50。

(2)迷宫的入口和出口分别在左上角和右下角。

(3)求得的通路以二元组( i , j )的形式输出,其中(i, j)指示迷宫中的一个坐标。

(4) 以二维数组存储迷宫数据。

3.问题描述:迷宫是一个矩形区域如图(a)所示,它有一个入口和一个出口,其内部包含能穿越的强或障碍。

迷宫老鼠问题就是要寻找一条从入口到出口的路径。

对这样的矩形迷宫,可以用N*M的矩阵来描述,N和M分别代表迷宫的行数和列数。

这样,迷宫中的每一个位置都可以用行号和列号来指定。

(1,1)表示入口位置,(n,m)表示出口位置;从入口到出口的路径则是由一个位置构成的,每个位置上都没有障碍,且每个位置(第一个除外)都是前一个位置的东、南、西或北的邻居。

为了描述迷宫中位置(i,j)处有无障碍,规定:当位置(i,j)处有一个障碍时,其值为1,否则为0。

这样,如图(a)所示的迷宫就可以用图(b)所示的矩阵来描述。

其中,a11=0表示入口,anm=0表示出口;若aij表示从入口到出口路径上的某个位置,则应该有aij=0经分析,一个简单的求解方法是:从入口出发,沿某一方向进行探索,若能走通,则继续向前走;否则沿原路返回,换一方向再进行搜索,直到所有可能的通路都探索到为止。

即0 1 1 1 1 1 0 0 0 00 0 0 0 0 1 0 1 0 00 0 0 1 0 1 0 0 0 00 1 0 1 0 1 0 1 1 00 1 0 1 0 1 0 1 0 00 1 1 1 0 1 0 1 0 10 1 0 0 0 1 0 1 0 10 1 0 1 1 1 0 1 0 01 0 0 0 0 0 0 1 0 00 0 0 0 0 1 1 1 0 0(a) (b)4.测试用例:手动绘制迷宫正确的输入数据:0 0 0 0 1 01 1 1 0 1 00 1 0 0 0 11 0 1 1 1 1手动绘制迷宫正确的输出结果:随机绘制迷宫错误的输出结果:此迷宫没有通路!注:用一个二维数组表示迷宫,数组中的每个元素表示一个小方格,0和1分别表示迷宫中的通路和障碍。

数据结构查找算法实验报告

数据结构查找算法实验报告

数据结构查找算法实验报告关键信息项:1、实验目的2、实验环境3、实验原理4、实验内容5、实验步骤6、实验结果7、结果分析8、遇到的问题及解决方法9、总结与体会1、实验目的11 熟悉常见的数据结构查找算法,如顺序查找、二分查找、哈希查找等。

111 掌握不同查找算法的基本原理和实现方法。

112 通过实验比较不同查找算法的性能,分析其时间复杂度和空间复杂度。

113 培养运用数据结构和算法解决实际问题的能力。

2、实验环境21 操作系统:具体操作系统名称211 编程语言:具体编程语言名称212 开发工具:具体开发工具名称3、实验原理31 顺序查找顺序查找是从数据结构的一端开始,依次逐个比较给定的关键字与数据元素的关键字,直到找到相等的元素或者遍历完整个数据结构为止。

其时间复杂度为 O(n)。

32 二分查找二分查找要求数据结构是有序的。

通过不断将待查找区间缩小为原来的一半,直到找到目标元素或者确定目标元素不存在。

其时间复杂度为 O(log n)。

33 哈希查找哈希查找通过哈希函数将关键字映射到一个特定的位置,然后在该位置进行比较。

如果发生冲突,则通过解决冲突的方法来查找目标元素。

其平均时间复杂度接近O(1),但在最坏情况下可能会退化为O(n)。

4、实验内容41 实现顺序查找算法,并对给定的无序数组进行查找操作。

411 实现二分查找算法,并对给定的有序数组进行查找操作。

412 实现哈希查找算法,并对给定的数据集进行查找操作。

413 对不同规模的数据集,分别使用上述三种查找算法进行查找,并记录查找时间和比较次数。

5、实验步骤51 顺序查找算法实现511 定义顺序查找函数,接受数组和要查找的关键字作为参数。

512 从数组的第一个元素开始,逐个比较关键字与数组元素的关键字。

513 如果找到相等的元素,返回该元素的索引;如果遍历完数组都未找到,返回-1。

52 二分查找算法实现521 定义二分查找函数,接受有序数组、要查找的关键字以及数组的起始和结束索引作为参数。

算法与数据结构课设(有向图,无向图,有向网,无向网)

算法与数据结构课设(有向图,无向图,有向网,无向网)

算法与数据结构课程设计报告系(院):计算机科学学院专业班级:教技1001姓名:李##学号: ******### 指导教师:***设计时间:2012.6.16 - 2012.6.24设计地点:4号楼2号机房目录一、设计方案 (1)二、实现过程以及代码 (2)三、测试 (20)四、结论和分析 (23)五、难点和收获 (23)一、 设计方案1.程序设计基本过程:拿到课程设计任务书,按照要求,需要设计有向图、有向网、无向图 、无向网四种图,以及邻接矩阵、邻接表两种数据存储结构,三层以上的显示菜单。

图的操作中又包含了有关线性表、栈和队列的基本操作。

由于显示菜单已给出,剩下的任务就是把函数写入其中。

2.程序流程图:预定义 定义结构体 定义变量 各种函数3.程序设计的原理:图的操作都是以两种存储结构为基础的:邻接矩阵存储结构和邻接表存储结构,如有向图,有向网,无向图,无向网的创建,其他的操作都是在四种图创建后才开始进行的。

所以,首先必须理解两种存储结构的定义。

图的邻接矩阵存储结构即图的数组表示法。

用两个数组分别存储数据元素(如顶点)的信息和数据元素之间的关系(如边或弧)的信息。

用邻接矩阵存储结构的图具有以下几点特征:(一):顶点数:vexnum ,边(弧)数:arcnum ,图的种类:kind ;(二):邻接矩阵:arcs(1顶点关系类型:adj 2相关信息:*info);(三):顶点向量(顶点名):vexs[];其优点是以二维数组表示有n 个顶点的图时,需存放n 个顶点的信息和n*n 条弧的信息存储量。

借助邻接矩阵容易判定任意两个顶点之间是否有边或弧相连,并容易求出各个顶点的度。

缺点是时间复杂度是O (n*n ),例如,构造一个具有n 个顶点和e 条边的无向网的时间复杂度为O (n*n+e*n )。

图的邻接表存储结构是图的一种链式存储结构。

对图中的每个顶点建立一个单链表,每个结点由三个域组成,邻接点域adjvex (弧尾在邻接表链表中的位序),链域nextarc (下一条弧),数据域info(权值)。

数据结构与算法实验报告

数据结构与算法实验报告

《数据结构与算法》综合实验报告系别:专业:学生姓名:指导教师:2011年 11月 25日实验目的掌握线性表的建立、插入、删除算法;掌握查找算法;掌握排序算法;实验要求使用C语言(环境任意)开发程序,能够对用户输入的任意一组数据,建立一个线性表,可以输出此线性表。

并且能够对此线性表进行插入、删除、查找、排序等操作。

程序流程建表如下:定义一个整型的数据类型data和next指针:定义头指针和当前结点指针,申请连续空间将单个字节大小复制给头指针,把头指针赋值给当前节点指针:若输入的数是0,则若输入不为0,把输入的数赋值给已申请的新结点,把新结点赋给当前节点的next域,再把新结点赋值给当前结点,以此方法重复执行得到如下链表:输出函数:把头指针赋值给当前结点指针,当当前节点的next域不为空时输出当前节点所指向的数据,把当前结点的next域赋值给当前节点,否则输出链表为空对此线性表进行插入、删除、查询、排序操作把已申请的结点数据域指向所输入的数再把插入w结点赋值头结点,是插入的位置,如果w=0则插入结点的next域赋值给头结点否则如果w>表长,则输出超出范围代码及运行结果(主要语句要求有注释)#include"stdafx.h"#include<stdio.h>#include<malloc.h>#define NULL 0typedef struct linknode{int data;struct linknode *next;}node;node *head;node *creat(){node *currnode,*newnode;int x;head=(node*)malloc(sizeof(node));currnode=head;do{scanf("%d",&x);newnode=(node*)malloc(sizeof(node));newnode->data=x;currnode->next=newnode;currnode=newnode;}while(x!=NULL);head=head->next;currnode->next=NULL;return head;};int length(){node *currnode;int i=0;currnode=head;while(currnode->data!=NULL){currnode=currnode->next;i++;};return i;};void print(){node *currnode;currnode=head;printf("链表如下....linklist");while(currnode->data!=NULL){printf("%d-->",currnode->data);currnode=currnode->next;};printf("NULL\n");printf("链表长度为........linklist length%d\n",length());};void delete1(){int x;node *delnode,*currnode;printf("输入要删除的数据......input delete data:");scanf("%d",&x);if(head->data==NULL) printf("此链表为空无法删除.....this linklist empty!\n"); if(head->data==x){delnode=head;head=head->next;free(delnode);if(head==NULL) printf("此链表为空.......this linklist enpty!");}else{currnode=head;delnode=currnode->next;while(delnode->data!=x&&delnode!=NULL){currnode=currnode->next;delnode=currnode->next;};if(delnode==NULL)printf("无此数据......no this data!\n");else{currnode->next=delnode->next;free(delnode);};};};void find(){node *currnode;int count=1,x;currnode=head;printf("输入要查找的数据.......input search data:");scanf("%d",&x);while(currnode->data!=NULL&&currnode->data!=x) {currnode=currnode->next;count++;};if(currnode->data!=NULL){printf("\n%d为第........is no.",currnode->data);printf("%d个数据........data。

数据结构课程设计——报告(样例)

数据结构课程设计——报告(样例)

《数据结构与算法》课程设计报告王婧、龚丹、宋毅编写题目:航空订票管理系统学期:秋班号:学号:姓名:成绩:哈尔滨华德学院电子与信息工程学院年月一、实训设计的目的与要求(注:正文为宋体,五号字,为单倍行距)(一)课程设计目的(不少于字).数据结构课程设计是综合运用数据结构课程中学到的几种典型数据结构,以及程序设计语言(语言),自行实现一个较为完整的应用系统。

.通过课程设计,自己通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。

.学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。

具体的有:()熟练掌握链表存储结构及其建立过程和常用操作;()熟练掌握队列的建立过程和常用操作;()学会自己调试程序的方法并掌握一定的技巧。

(二)题目要求(不少于字).每条航线所涉及的信息有:终点站名、航班号、飞机号、飞机周日(星期几)、乘员定额、余票量、订定票的客户名单(包括姓名、订票量、舱位等级,或)以及等候替补的客户名单(包括姓名和所需数量)。

.系统能实现的操作和功能如下:()查询航线:根据客户提出的终点站名输出如下信息:航班号、飞机号、星期几飞行和余票额;()承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票量少余订票额,则需重新询问客户要求。

若需要,可登记排队候补;()承办退票业务:根据客户提出的情况(日期、航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补的客户。

二、实训环境配置系统三、设计正文.需求分析。

算法与数据结构实验报告

算法与数据结构实验报告

2015-2016学年第二学期《算法与数据结构》课程实验报告专业软件工程学生姓名成晓伟班级软件141学号1410075094实验学时16实验教师徐秀芳信息工程学院实验一单链表的基本操作一、实验目的1.熟悉C语言上机环境,进一步掌握C语言的基本结构及特点。

2.掌握线性表的各种物理存储表示和C语言实现。

3.掌握单链表的各种主要操作的C语言实现。

4.通过实验理解线性表中的单链表存储表示与实现。

二、主要仪器及耗材普通计算机三、实验内容与要求1、用C语言编写一个单链表基本操作测试程序。

(1)初始化单链表(2)创建单链表(3)求单链表长度(4)输出单链表中每一个结点元素(5)指定位置插入某个元素(6)查找第i个结点元素的值(7)查找值为e 的结点,并返回该结点指针(8)删除第i个结点(9)销毁单链表2、实验要求(1)程序中用户可以选择上述基本操作。

程序启动后,在屏幕上可以菜单形式显示不同功能,当按下不同数字后完成指定的功能,按其他键,则显示错误后重新选择。

(2)要求用线性表的顺序存储结构,带头结点的单链表存储结构分别实现。

(3)主函数实现对基本操作功能的调用。

3、主要代码(1)初始化单链表LinkList *InitList(){ //创建一个空链表,初始化线性表LinkList *L;L=(LinkList *)malloc(sizeof(LinkList));L->next=NULL;return L;}(2)创建单链表//头插法void CreateListF(LinkList *L){LinkList *s;int i=1,a=0;while(1){printf("输入第%d个元素(0表示终止)",i++);scanf("%d",&a);if(a==0)break;s=(LinkList *)malloc(sizeof(LinkList));s->data=a;s->next=L->next;L->next=s;}}(3)求链表长度int ListLength(LinkList *L){ //求链表长度int n=0;LinkList *p=L;while(p->next!=NULL){p=p->next;n++;}return(n);}(4)在指定位置插入元素int InsertList(LinkList *L,int i,ElemType e){LinkList *p=L,*s;int j=0;while(p!=NULL&&j<i-1){p=p->next;j++;} //找出要插入的位置的前一个位置if(p==NULL){return 0;}else{s=(LinkList *)malloc(sizeof(LinkList));s->data=e;s->next=p->next;p->next=s;return 1;}}(5)输出链表void DispList(LinkList *L){ //输出链表LinkList *p=L->next;while(p!=NULL){printf("%d",p->data);p=p->next;}printf("\n");}(6)查找链表中指定元素int GetElem(LinkList *L,int i){ //查找链表中指定元素LinkList *p=L;int j=0;while(j<i&&p!=NULL){j++;p=p->next;}if(p==NULL){return 0;}else{return p->data;}}(7)查找值是e的结点并返回该指针LinkList *LocateElem(LinkList *L,ElemType e){ //查找值是e的结点并返回该指针int i=1;LinkList *p=L;while(p!=NULL)if(p->data==e) return p;}if(p==NULL){return NULL;}}(8)删除元素int ListDelete(LinkList *L,int i,ElemType *e){ //删除元素LinkList *p=L,*q;int j=0;while(p!=NULL&&j<i-1){p=p->next;j++;} //找到要删除元素地址的前一个地址if(p==NULL){ return 0;} //不能删除else{q=p->next;*e=q->data;p->next=q->next;free(q); //删除成功return 1;}}(9)销毁链表void DestroyList(LinkList *L){//销毁链表LinkList *pre=L,*p=L->next;while(p!=NULL){free(pre);pre=p;p=pre->next;}free(pre);}main函数:int main(){LinkList *L;ElemType e;int i;L=InitList();CreateListF(L);DispList(L);printf("输入要查找的元素位置:\n");scanf("%d",&i);e=GetElem(L,i);printf("%d\n",e);printf("单链表长度为:%d\n",ListLength(L));printf("输入要删除元素的位置:");scanf("%d",&i);if (i>ListLength(L)){printf("超出范围重新输入");scanf("%d",&i);}if(ListDelete(L,i,&e)==0){printf("未找到元素\n");}else DispList(L);printf("输入插入元素的位置和值:");scanf("%d%d",&i,&e);InsertList(L,i,e);DispList(L);return 0;}4、测试数据及测试结果输入:23 56 12 28 45输出:四、注意事项1、存储结构定义和基本操作尽可能用头文件实现。

数据结构迷宫问题实验报告

数据结构迷宫问题实验报告

《数据结构与算法设计》迷宫问题实验报告——实验二专业:物联网工程班级:物联网1班学号:********姓名:***一、实验目的本程序是利用非递归的方法求出一条走出迷宫的路径,并将路径输出。

首先由用户输入一组二维数组来组成迷宫,确认后程序自动运行,当迷宫有完整路径可以通过时,以0和1所组成的迷宫形式输出,标记所走过的路径结束程序;当迷宫无路径时,提示输入错误结束程序。

二、实验内容用一个m*m长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。

设计一个程序对于任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。

三、程序设计1、概要设计(1)设定栈的抽象数据类型定义ADT Stack{数据对象:D={ai|ai属于CharSet,i=1、2…n,n>=0}数据关系:R={<ai-1,ai>|ai-1,ai属于D,i=2,3,…n}基本操作:InitStack(&S)操作结果:构造一个空栈Push(&S,e)初始条件:栈已经存在操作结果:将e所指向的数据加入到栈s中Pop(&S,&e)初始条件:栈已经存在操作结果:若栈不为空,用e返回栈顶元素,并删除栈顶元素Getpop(&S,&e)初始条件:栈已经存在操作结果:若栈不为空,用e返回栈顶元StackEmpty(&S)初始条件:栈已经存在操作结果:判断栈是否为空。

若栈为空,返回1,否则返回0Destroy(&S)初始条件:栈已经存在操作结果:销毁栈s}ADT Stack(2)设定迷宫的抽象数据类型定义ADT yanshu{数据对象:D={ai,j|ai,j属于{‘’、‘*’、‘@’、‘#’},0<=i<=M,0<=j<=N}数据关系:R={ROW,COL}ROW={<ai-1,j,ai,j>|ai-1,j,ai,j属于D,i=1,2,…M,j=0,1,…N}COL={<ai,j-1,ai,j>|ai,j-1,ai,j属于D,i=0,1,…M,j=1,2,…N}基本操作:InitMaze(MazeType &maze, int a[][COL], int row, int col){初始条件:二维数组int a[][COL],已经存在,其中第1至第m-1行,每行自第1到第n-1列的元素已经值,并以值0表示障碍,值1表示通路。

数据结构与算法课程设计报告---图的算法实现

数据结构与算法课程设计报告---图的算法实现

数据结构与算法课程设计报告课程设计题目:图的算法实现专业班级:信息与计算科学1002班目录摘要 (1)1、引言 (1)2、需求分析 (1)3、概要设计 (2)4、详细设计 (4)5、程序设计 (10)6、运行结果 (18)7、总结体会 (19)摘要(题目): 图的算法实现实验内容图的算法实现问题描述:(1)将图的信息建立文件;(2)从文件读入图的信息,建立邻接矩阵和邻接表;(3)实现Prim、Kruskal、Dijkstra和拓扑排序算法。

关键字:邻接矩阵、Dijkstra和拓扑排序算法1.引言本次数据结构课程设计共完成图的存储结构的建立、Prim、Kruskal、Dijkstra 和拓扑排序算法等问题。

通过本次课程设计,可以巩固和加深对数据结构的理解,通过上机和程序调试,加深对课本知识的理解和熟练实践操作。

(1)通过本课程的学习,能够熟练掌握数据结构中图的几种基本操作;(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。

使用语言:CPrim算法思想:从连通网N={V,E}中的某一顶点v0出发,选择与它关联的具有最小权值的边(v0,v),将其顶点加入到生成树的顶点集合V中。

以后每一步从一个顶点在V中,而另一个顶点不在V中的各条边中选择权值最小的边(u,v),把它的顶点加入到集合V中。

如此继续下去,直到网中的所有顶点都加入到生成树顶点集合V中为止。

拓扑排序算法思想:1、从有向图中选取一个没有前驱的顶点,并输出之;2、从有向图中删去此顶点以及所有以它为尾的弧;重复上述两步,直至图空,或者图不空但找不到无前驱的顶点为止。

没有前驱-- 入度为零,删除顶点及以它为尾的弧-- 弧头顶点的入度减1。

2.需求分析1、通过键盘输入建立一个新的有向带权图,建立相应的文件;2、对建立的有向带权图进行处理,要求具有如下功能:(1)用邻接矩阵和邻接表的存储结构输出该有向带权图,并生成相应的输出结果;(2)用Prim、Kruskal算法实现对图的最小生成树的求解,并输出相应的输出结果;(3)用Dijkstra算法实现对图中从某个源点到其余各顶点的最短路径的求解,并输出相应的输出结果;(4)实现该图的拓扑排序算法。

数据结构(C语言版)实验报告 (内部排序算法比较)

数据结构(C语言版)实验报告 (内部排序算法比较)

《数据结构与算法》实验报告一、需求分析问题描述:在教科书中,各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间。

试通过随机数据比较各算法的关键字比较次数和关键字移动次数,以取得直观感受。

基本要求:(l)对以下6种常用的内部排序算法进行比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。

(2)待排序表的表长不小于100000;其中的数据要用伪随机数程序产生;至少要用5组不同的输入数据作比较;比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换计为3次移动)。

(3)最后要对结果作简单分析,包括对各组数据得出结果波动大小的解释。

数据测试:二.概要设计1.程序所需的抽象数据类型的定义:typedef int BOOL; //说明BOOL是int的别名typedef struct StudentData { int num; //存放关键字}Data; typedef struct LinkList { int Length; //数组长度Data Record[MAXSIZE]; //用数组存放所有的随机数} LinkList int RandArray[MAXSIZE]; //定义长度为MAXSIZE的随机数组void RandomNum() //随机生成函数void InitLinkList(LinkList* L) //初始化链表BOOL LT(int i, int j,int* CmpNum) //比较i和j 的大小void Display(LinkList* L) //显示输出函数void ShellSort(LinkList* L, int dlta[], int t,int* CmpNum, int* ChgNum) //希尔排序void QuickSort (LinkList* L, int* CmpNum, int* ChgNum) //快速排序void HeapSort (LinkList* L, int* CmpNum, int* ChgNum) //堆排序void BubbleSort(LinkList* L, int* CmpNum, int* ChgNum) //冒泡排序void SelSort(LinkList* L, int* CmpNum, int* ChgNum) //选择排序void Compare(LinkList* L,int* CmpNum, int* ChgNum) //比较所有排序2 .各程序模块之间的层次(调用)关系:二、详细设计typedef int BOOL; //定义标识符关键字BOOL别名为int typedef struct StudentData //记录数据类型{int num; //定义关键字类型}Data; //排序的记录数据类型定义typedef struct LinkList //记录线性表{int Length; //定义表长Data Record[MAXSIZE]; //表长记录最大值}LinkList; //排序的记录线性表类型定义int RandArray[MAXSIZE]; //定义随机数组类型及最大值/******************随机生成函数********************/void RandomNum(){int i; srand((int)time(NULL)); //用伪随机数程序产生伪随机数for(i=0; i小于MAXSIZE; i++) RandArray[i]<=(int)rand(); 返回;}/*****************初始化链表**********************/void InitLinkList(LinkList* L) //初始化链表{int i;memset(L,0,sizeof(LinkList));RandomNum();for(i=0; i小于<MAXSIZE; i++)L->Record[i].num<=RandArray[i]; L->Length<=i;}BOOL LT(int i, int j,int* CmpNum){(*CmpNum)++; 若i<j) 则返回TRUE; 否则返回FALSE;}void Display(LinkList* L){FILE* f; //定义一个文件指针f int i;若打开文件的指令不为空则//通过文件指针f打开文件为条件判断{ //是否应该打开文件输出“can't open file”;exit(0); }for (i=0; i小于L->Length; i++)fprintf(f,"%d\n",L->Record[i].num);通过文件指针f关闭文件;三、调试分析1.调试过程中遇到的问题及经验体会:在本次程序的编写和调试过程中,我曾多次修改代码,并根据调试显示的界面一次次调整代码。

数据结构课程设计报告

数据结构课程设计报告

目录第一章课程设计的目的和意义 (1)第二章需求分析 ...................................................................... 错误!未定义书签。

第三章系统设计 (3)3.1 概要设计 (3)3.2详细设计 (5)第四章系统测试 (5)4.1系统运行初始界面 (6)4.2录入航班、客户信息界面 (6)4.3 查看所有航班信息界面 (6)4.4 买票、退票界面 (7)第五章心得体会 (7)第六章参考文献 (8)致谢 (8)附录 (9)源程序: (9)第一章课程设计的目的和意义《数据结构》主要介绍一些最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。

数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。

学习数据结构是为了将实际问题中所涉及的对象在计算机中表示出来并对它们进行处理。

通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。

通过此次课程设计主要达到以下目的:一:了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;二:初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;三:提高综合运用所学的理论知识和方法独立分析和解决问题的能力;四:训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。

五:锻炼动手操作能力,培养我们的创新思维能力。

从编写代码,到调试程序,再到运行程序,这是设计的最重要环节,它需要我们用逻辑思维将我们所学知识和实际相结合,并在对方案的分析过程中能够有所创新,从而使运行方案更严谨更简洁。

培养好良好的思维,便要将这种思维赋予实践,即动手操作能力。

dsa课程设计报告

dsa课程设计报告

dsa课程设计报告一、教学目标本课程的教学目标是使学生掌握DSL(数据结构与算法)的基本概念、原理和方法,培养学生运用DSL解决实际问题的能力。

具体来说,知识目标包括:1.理解数据结构的基本概念,如栈、队列、链表、树、图等;2.掌握算法的表示、分析和设计方法;3.熟悉常用的算法,如排序、查找、最短路径、最大公约数等;4.了解DSL在实际应用中的重要性。

技能目标包括:1.能够运用DSL解决简单的问题;2.能够分析算法的时间复杂度和空间复杂度;3.能够编写简单的算法程序。

情感态度价值观目标包括:1.培养学生的逻辑思维能力;2.培养学生的问题解决能力;3.培养学生团队合作和自主学习的意识。

二、教学内容本课程的教学内容主要包括以下几个部分:1.数据结构:栈、队列、链表、树、图等基本概念及其应用;2.算法:算法的表示、分析和设计方法;3.常用算法:排序、查找、最短路径、最大公约数等;4.算法编程:基本编程语言和算法实现的结合。

教学大纲安排如下:1.第1-2周:数据结构基本概念及应用;2.第3-4周:算法表示、分析和设计方法;3.第5-6周:常用算法及其实现;4.第7-8周:算法编程实践。

三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法:1.讲授法:讲解基本概念、原理和方法,引导学生理解;2.讨论法:学生讨论问题,培养学生的逻辑思维和问题解决能力;3.案例分析法:分析实际应用案例,让学生体验DSL在解决问题中的作用;4.实验法:让学生动手编写程序,巩固理论知识。

四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将选择和准备以下教学资源:1.教材:《数据结构与算法》(推荐教材,具体版本可根据实际情况选择);2.参考书:提供相关领域的经典教材和论文,供学生深入研究;3.多媒体资料:制作课件、教学视频等,辅助学生理解;4.实验设备:提供计算机实验室,让学生进行编程实践。

五、教学评估本课程的评估方式包括平时表现、作业、考试等,以全面、客观、公正地反映学生的学习成果。

约瑟夫问题(算法与数据结构课设报告)

约瑟夫问题(算法与数据结构课设报告)

线性表的操作及其应用一、问题描述线性表、队列是一种常用的数据结构,有顺序和链式两种存储结构,在实际中应用十分广泛,而链表又分为单链表和循环链表,队列又分为链式队列和循环队列。

这些数据结构都可用来解决约瑟夫环问题。

约瑟夫环问题是算法设计中的一个经典问题,是顺序编号的一组n个人围坐一圈,从第1个人按一定方向顺序报数,在报到m时该人出列,然后按相同方法继续报数,直到所有人出列。

设计算法求约瑟夫环中人员的出列顺序。

二、基本要求1、选择合适的存储结构,建立线性表;2、利用顺序存储结构求解约瑟夫环问题;3、利用单链表和循环链表分别求解约瑟夫环问题;4、利用队列求解约瑟夫环问题。

三、测试数据约瑟夫环的测试数据为7,报数为1至3。

四、算法思想由于用到四种不同的存储结构,它们的算法思想依次是:1、首先建立一个顺序表模拟整个约瑟夫环,手动输入顺序表长(即参加约瑟夫循环的人数)和循环的次数和表元素。

用已经输出总人数和顺序表长作比较,作为外层循环条件。

并对每一个输出后的元素重新赋值以为标记。

对于每次循环,首先检查顺序表此次是不是我们设立的标记,如果不是则循环次数加1,当达到要求的循环次数时就将循环次数设置为0,输出该元素到屏幕并将总输出元素加1。

每次外循环我们都会移到表的下一个位置,作为新的判断条件,每次报到表尾的时候,我们都将重新设置到表尾,作为下次循环的表元素。

2、首先采用链式循环链表建立整个约瑟夫环,手动输入第一次的循环次数和每个人所持下一个循环次数。

设立判断指针指向表头,并将该指针是否为空作为外层循环条件。

做一个内层循环,将判断指针移动到循环要输出的数,并设立一个前指针指向该指针的前一个位置,输出该元素后,将循环次数重新赋值成该元素。

接着判断前指针和判断指针比较,如果相等说明整个表已经输出完毕,否则将删除该位置的元素。

3、用链式队列建立循环约瑟夫环,手动输入人数,第一次的循环次数和每个人所持下一个循环次数。

并将每一个元素依次入队列,根据第一次循环次数,建立一个for循环,每一次循环都出队列,如果达到要求的循环次数就输出,否则进队列,这样这个数字就出现在队尾。

算法与数据结构实验报告——树及其应用

算法与数据结构实验报告——树及其应用

北京邮电大学软件学院2019-2020学年第1学期实验报告课程名称:算法与数据结构课程设计实验名称:树及其应用实验完成人:日期: 2019 年 11月 10 日一、实验目的树是一种应用极为广泛的数据结构,也是这门课程的重点。

它们的特点在于非线性。

广义表本质上是树结构。

本章实验继续突出了数据结构加操作的程序设计观点,但根据这两种结构的非线性特点,将操作进一步集中在遍历操作上,因为遍历操作是其他众多操作的基础。

遍历逻辑的(或符号形式的)结构,访问动作可是任何操作。

本次实验希望帮助学生熟悉各种存储结构的特征,以及如何应用树结构解决具体问题(即原理与应用的结合)。

二、实验内容必做内容1)二叉树的建立与遍历[问题描述]建立一棵二叉树,并对其进行遍历(先序、中序、后序),打印输出遍历结果。

[基本要求]从键盘接受输入(先序),以二叉链表作为存储结构,建立二叉树(以先序来建立),并采用递归算法对其进行遍历(先序、中序、后序),将遍历结果打印输出。

[测试数据]ABCффDEфGффFффф(其中ф表示空格字符)则输出结果为先序:ABCDEGF中序:CBEGDFA后序:CGBFDBA2)打印二叉树结构[问题描述]按凹入表形式横向打印二叉树结构,即二叉树的根在屏幕的最左边,二叉树的左子树在屏幕的下边,二叉树的右子树在屏幕的上边。

例如:[测试数据]由学生依据软件工程的测试技术自己确定。

注意测试边界数据,如空二叉树。

[实现提示](1)利用RDL遍历方法;(2)利用结点的深度控制横向位置。

选做内容采用非递归算法实现二叉树遍历。

三、实验环境Windows下利用vs 2019完成,语言c++四、实验过程描述首先构造Tree类,内含树的结构体BiTree,以及本实验所要用到的一些操作typedef struct BiTNode{TElemType data;int degree, depth, level; //度,高度,高度差struct BiTNode* lchild, * rchild; /* 左右孩子指针 */}BiTNode, * BiTree;实现相应功能:1、二叉树的建立与遍历构造二叉树:前序构造,先赋值,然后递归构造左子树,递归构造右函数BiTNode* Tree::CreatBiTree(BiTree T) {TElemType ch;cin >> noskipws >> ch; //不跳过空格if (ch == ' ')T = NULL; //输入空格表示空子树else {T = new BiTNode; //分配空间if(!T) //分配失败就退出throw new std::bad_alloc;T->degree = 0; //记录度(T)->data = ch;T->depth++; //度增加T->lchild=CreatBiTree(T->lchild); //递归创建左子树T->rchild=CreatBiTree(T->rchild); //递归创建右子树if (T->lchild != NULL)T->degree++; //有一个孩子度就加一if (T->rchild != NULL)T->degree++;}return T;}销毁二叉树:后序递归销毁左右子树(需要先查找到子树,销毁再销毁父亲树)void Tree::Release(BiTree T) {if (T != NULL) {Release(T->lchild); //递归销毁左子树Release(T->rchild); //递归销毁右子树delete T;}}//前序遍历void Tree::PreOrderTraverse(BiTree T, void(Tree::*Visit)(BiTree)) { if (T) /* T不空 */{(this->*Visit)(T); /* 先访问根结点 */PreOrderTraverse(T->lchild, Visit); /* 再先序遍历左子树 */PreOrderTraverse(T->rchild, Visit); /* 最后先序遍历右子树 */ }}//中序遍历void Tree::InOrderTraverse(BiTree T, void(Tree::*Visit)(BiTree)) {if (T){InOrderTraverse(T->lchild, Visit); /* 先中序遍历左子树 */(this->*Visit)(T); /* 再访问根结点 */InOrderTraverse(T->rchild, Visit); /* 最后中序遍历右子树 */ }}//后序遍历void Tree::PostOrderTraverse(BiTree T, void(Tree::*Visit)(BiTree)) {if (T){PostOrderTraverse(T->lchild, Visit); /* 先中序遍历左子树 */PostOrderTraverse(T->rchild, Visit); /* 最后中序遍历右子树 */(this->*Visit)(T); /* 再访问根结点 */}}//查找深度int Tree::TreeDepth(BiTree T) {int i, j;if (!T)return 0; /* 空树深度为0 */if (T->lchild)i = TreeDepth(T->lchild); /* i为左子树的深度 */elsei = 0;if (T->rchild)j = TreeDepth(T->rchild); /* j为右子树的深度 */elsej = 0;T->depth = i > j ? i + 1 : j + 1;return T->depth;}//得到层数void Tree::getLevel(BiTree T, int level){if (T){T->level = level;getLevel(T->lchild, level + 1); //得到左子树的层数,左子树根节点的层数比此节点多一getLevel(T->rchild, level + 1); //得到右子树的层数,右子树根节点的层数比此节点多一}}//非递归中序遍历void Tree::NoRecInOrderTraverse(BiTree T, void(Tree::*Visit)(BiTree)) {LinkedStack<BiTree> S;BiTree p = T;while (p || !S.isEmpty()) {if (p) {S.Push(p); //当节点不为空时就压栈,然后判断左孩子p = p->lchild;}else {p=S.Pop(); //返回到父节点(this->*Visit)(p); //访问p = p->rchild; //然后指向右节点}}}实验二:2、打印二叉树结构//中序遍历RDLvoid Tree::InOrderTraverseRDL(BiTree T, void(Tree::* Visit)(BiTree)) {if (T){InOrderTraverseRDL(T->rchild, Visit); /* 先中序遍历左子树 */(this->*Visit)(T); /* 再访问根结点 */InOrderTraverseRDL(T->lchild, Visit); /* 最后中序遍历右子树 */ }}//打印二叉树图形打印图形时,需要中序遍历RDL(先遍历右节点,再遍历右节点)。

课程设计报告模板

课程设计报告模板

深圳大学课程设计报告课程名称:数据结构与算法项目名称:图着色问题任课教师:张艳学院:计算机与软件学院专业:组员1 姓名:黄展洽学号:2015150272 组员2 姓名:陈捷帆学号:2015150278 组员3 姓名:董栩华学号:2015150088一、问题描述给定无向连通图G=(V,E),求图G的最小色数K。

设计一个算法,用K种颜色对G中的顶点着色,使任意两个相邻顶点着色不同。

采用的算法:贪心法要求随机生成连通图,自动绘制连通图,在图上显示着色结果。

二、算法描述(详细算法过程、复杂度分析等)图的m色优化算法可用贪心法来解,其思想是:任选一顶点着色1,在图中尽可能多的用颜色1着色;当不能用颜色1着色时,转用颜色2将未着色的顶点尽可能多的着色···直到所有顶点都被着色停止。

三、算法实现(数据结构、流程图)四、实验结果(效果、功能、以及其他相关图片,数据等)五、问题分析(碰到什么问题,如何解决)六、心得与体会七、任务分工及所完成的状况八、参考文献(格式如下)[1] “数据结构(C语言版)”,严慧敏、吴伟民,清华大学出版社[2] “数据结构、算法与应用(C++语言描述)”,【美】Sartaj Sahni,机械工业出版社[3] “算法设计与分析”,张德富,国防工业出版社九、程序源码(对核心代码和数据变量加注释)十、诚信承诺(注此项不可分开为两页!)个人得分权重分配表我组成员总共____3___名,权重总和为: 100 %本组成员郑重承诺在课程设计完成过程中不发生任何不诚信现象,一切不诚信所导致的后果均由本组成员承担。

同时我组成员同意此课程设计的个人得分权重分配表。

签名(手签全部成员):。

《数据结构与算法设计课程设计》(12级6班)实验报告册(2014-9-2)[1]

《数据结构与算法设计课程设计》(12级6班)实验报告册(2014-9-2)[1]

内江师范学院数据结构与算法设计课程设计实验报告册编制算法设计课题组审定曾意专业:信息与计算科学班级:2012级 6 班学号:姓名:数学与信息科学学院2014年9月说明1.学生在做实验之前必须要准备实验,主要包括预习与本次实验相关的理论知识,熟练与本次实验相关的软件操作,收集整理相关的实验参考资料,要求学生在做实验时能带上充足的参考资料;若准备不充分,则学生不得参加本次实验,不得书写实验报告;2.要求学生要认真做实验,主要是指不得迟到、早退和旷课,在做实验过程中要严格遵守实验室规章制度,认真完成实验内容,极积主动地向实验教师提问等;若学生无故旷课,则本次实验等级计为D;3.学生要认真工整地书写实验报告,实验报告的内容要紧扣实验的要求和目的,不得抄袭他人的实验报告;4.实验成绩评定分为A+、A、A-、B+、B、C、D各等级。

根据实验准备、实验态度、实验报告的书写、实验报告的内容进行综合评定,具体对应等级如下:完全符合、非常符合、很符合、比较符合、基本符合、不符合、完全不符合。

实验名称:算法设计基础实验(实验一)指导教师:牟廉明,刘芳实验时数: 4 实验设备:安装了VC++计算机实验日期:年月日实验地点:第五教学楼北802 实验目的:掌握算法设计的基本原理,熟悉算法设计的基本步骤及其软件实现。

实验准备:1.在开始本实验之前,请复习相关实验内容;2.需要一台准备安装Windows XP Professional操作系统和装有VC++6.0的计算机。

实验内容:求n至少为多大时,n个1组成的整数能被2013整除。

实验过程:1.1算法思想1.2 算法步骤1.3算法实现(C++程序代码)1.4 算法分析实验总结(由学生填写):实验等级评定:实验名称:蛮力法实验—分式化简(实验二)指导教师:牟廉明,刘芳实验时数: 4 实验设备:安装了VC++的计算机实验日期:年月日实验地点:第五教学楼北802实验目的:掌握蛮力法的基本思想和方法,熟悉搜索法的软件实现。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构与算法》
课程设计报告
系别:计算机与电子系
专业班级:计算机科学与技术0901班
学生姓名:王年6月13日——2011年7月1日)
华中科技大学武昌分校
1.课程设计目的………………………………………………………………………2
2.课程设计题目及要求………………………………………………………………2
intlocpol(pol *p,termx)函数的功能为在多项式p中查找与x项指数相同的项是否存在,存在则返回1,不存在则返回0。在查找前先调用statuspol(p)函数判断当前多项式是否为空,若为空则直接返回0,若不为空则继续查找。
intinspol(pol *p,termx)函数的功能为在多项式p中插入一个指数项x,并使多项式按照指数降序排列。
选择2可以将刚才建立的2个多项式相加,并得出结果。
按任意键返回主菜单后选择3就能够将建立的2个多项式相减,并将结果打印输出在显示器上。
继续按任意键返回,选择4就能将2个多项式相乘并将结果打印输出在显示器上。
pol *addpol(pol *p1,pol *p2)函数的功能为将多项式p1与p2相加并生成一个新的多项式,然后将其返回。首先判断两个多项式中是否有多项式不存在,然后利用compare函数判断多项式各项的指数大小,若指数项不相等,则将指数项大的一项存入新创建的p3中,若两项指数相等,则将两项系数相加后存入p3中。若相加结束后某个多项式有剩余项则将剩余项全部存入p3中。
2.1一元多项式加法、减法、乘法运算的实现………………………………………2
2.2校园导游咨询……………………………………………………………………3
2.3简单文本编辑器设计与实现……………………………………………………3
2.4利用单链表实现学生成绩管理系统……………………………………………4
2.5课程设计要求……………………………………………………………………5
3.详细设计描述………………………………………………………………………5
3.1运行环境…………………………………………………………………………5
3.2系统流程图………………………………………………………………………6
3.3主控main函数……………………………………………………………………7
3.4一元多项式加法、减法、乘法运算的实现………………………………………8
2.4利用单链表实现学生成绩管理系统
设计要求:利用单链表存储结构实现学生成绩管理系统,支持基本的数据录入、删除、查找、修改、统计和文件读写功能。整个系统由五大功能模块组成:
1.输入记录:主要完成将数据存入单链表中的工作。
2.查询记录:可按学生的姓名或学号查询。
3.更新记录:对记录的修改、删除、插入、排序。
8.编写课程设计报告
3.详细设计描述
3.1运行环境
开发环境:Microsoft Visual C++ 6.0。Visual C++(简称VC)是Microsoft公司推出的目前使用极为广泛的基于Windows平台的C++可视化开发环境。Visual C++ 6.0提供的控制台应用程序对学习和掌握标准C++内容非常有利。“可视”的资源编辑器与MFC类以及应用程序向导,为快速高效地开发出功能强大的Windows应用程序提供了极大的方便。利用Visual C++ 6.0进行Internet、数据库及多媒体等多方面的程序开发也很容易。
2.3简单文本编辑器设计与实现
设计要求:输入一页文字,采用动态存储结构存储一页文章,每行最多不超过80个字符,共N行。
功能如下:
1.分别统计出其中英文字母数和空格数及整篇文章总字数。
2.统计某一字符串在文章中出现的次数,并输出该次数。
3.在指定行前插入文本,删除指定行文本。
4.查找定位某个单词在文本中的位置。
5.装入和保存文本。
设计思路:利用双向链表存储结构存储文章,每行文字存储在数组中,不超过80个字,行数保存为num。对每行文本从头到尾进行循环,读入一个字符进行计算以统计文本中的中英文字母数和空格数及整篇文章的总字数。通过对数组中字符串的操作完成查找定位的功能。通过对每行文本行号的处理能够完成删除一行或在某行前插入文本的功能。
intcreatepol(pol *p,intn)函数的功能为创建一个包含n项系数和指数的一元多项式的有序表p,程序依次判断多项式是否不存在、项数是否大于MAXSIZE的限制,若满足以上条件则进入循环输入n项系数和指数。循环结束后返回1表示创建成功。
char compare(term term1,term term2)函数的功能为判断两个项指数之间的大小关系。若term1指数项大于term2指数项则返回大于号‘>’,若term1指数项小于term2指数项则返回小于号‘<’,若term1指数项等于term2指数项则返回等于号‘=’。该函数在下面的函数中有重要作用。
4.培养算法分析能力。分析所设计算法的时间复杂度和空间复杂度,进一步提高程序设计水平。
5.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。
2.课程设计题目及要求
2.1一元多项式加法、减法、乘法运算的实现
设计要求:设计一个程序,能够完成两个一元多项式作加法、减法、乘法,给出明确的等式形式。
4.统计记录:完成对各门功课最高分和不及格人数的统计。
5.输出记录:实现屏幕显示和将单链表中存储的记录信息写入数据文件中。
设计思路:采用模块化设计的方法,将本系统分为输入模块、查询模块、更新模块、统计模块和输出模块。分别对每个模块进行设计,最后利用统一调用的函数就能完成系统的复杂功能。输入模块将学生姓名、学号、各科成绩等数据存入单链表中。查询模块通过对学生的姓名、学号在单链表中进行查询,若能找到满足查询条件的记录,就返回该学生记录的指针,否则返回NULL空指针。更新模块能够完成特定记录的修改、删除、插入和排序。统计模块可以按照学生各门功课的最高分数或不及格人数进行统计。输出模块能够将单链表中存储的数据显示在终端或导出到数据文件中。
3.2系统流程图
3.3主控main函数
3.3.1main函数执行流程图
3.3.2main函数测试分析
进入主界面中后能够选择0-4功能,按对应按键就能够通过调用相关函数实现对应功能。
3.4一元多项式加法、减法、乘法运算的实现
3.4.1数据结构设计
3.4.2函数执行流程
3.4.3函数功能描述
intstatuspol(pol *p)函数的功能为判断当前多项式的状态。如果当前多项式不存在则返回-1,如果当前多项式为空则返回0,如果当前多项式不为空则返回1。该函数在以下几个函数中有很重要的作用。
3.5校园导游咨询……………………………………………………………………13
3.6简单文本编辑器设计与实现……………………………………………………17
3.7利用单链表实现学生成绩管理系统……………………………………………23
4.总结………………………………………………………………………………31
4.1开发经验…………………………………………………………………………31
pol *subpol(pol *p1,pol *p2)函数的功能为将多项式p1与p2相减并生成一个新的多项式,然后将其返回。首先判断两个多项式中是否有多项式不存在,然后将多项式p2中的每一项变为相反数并存入新创建的p3中,然后将p1与p3进行相加就能完成减法操作。
pol *mulitpol(pol *p1,pol *p2)函数的功能为将多项式p1与多项式p2相乘并生成一个新的多项式,然后将其返回。首先判断两个多项式中是否有多项式不存在,然后创建若干个空多项式,将每项相乘的结果存入空多项式中然后将新生成的p3与若干个空多项式相加就能完成乘法运算。
2.5课程设计要求
数据结构课程设计用C编程实现。
课程设计的一般步骤:
1.问题描述与分析:根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么?限制条件是什么?
2.数据结构设计:为实现每个功能选择的逻辑结构和存储结构,分析原因及合理性。
3.软件结构设计:设计软件模块之间的结构。
4.算法设计:算法的设计及算法分析。每个部分的算法设计说明,可以用流程图描述算法。
4.2不足之处…………………………………………………………………………32
4.3感谢和心得体会…………………………………………………………………32
参考文献 ……………………………………………………………………………33
1.
课程设计目的
《数据结构》主要介绍一些最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。
数据结构课程设计是为数据结构课程独立开设的实践性教学环节。数据结构课程设计对于巩固数据结构知识,加强学生的实际动手能力和提高学生综合素质是十分必要的。课程设计的目的:
1.要求学生达到熟练掌握C语言的基本知识和技能。
2.了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力。
3.提高程序设计和调试能力。学生通过上机实习,验证自己设计的算法的正确性。学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。
5.程序编码:把详细设计的结果进一步求精为程序设计语言程序。源程序要按照软件工程的规则来编写,要求结构清晰,重要功能部分要加上清晰的程序注释。
6.调试分析:掌握调试工具的各种功能,设计测试数据,测试输出的结果。并进行算法的时间复杂度和空间复杂度的分析。
相关文档
最新文档