数据结构课程总结
- 格式:doc
- 大小:42.50 KB
- 文档页数:8
时光荏苒,转眼间一周又即将过去。
在这短暂的一周里,我通过不懈的努力,收获颇丰。
以下是我本周的学习小总结:一、学习内容1. 专业课程:本周我主要学习了《数据结构》和《操作系统》两门课程。
在《数据结构》中,我深入了解了各种数据结构的原理和应用场景,并通过上机实验巩固了所学知识。
在《操作系统》课程中,我对操作系统的基本原理和功能有了更深入的认识。
2. 英语学习:本周我继续坚持每天学习英语,通过听、说、读、写四个方面提高自己的英语水平。
我参加了英语角活动,与同学们一起练习口语,并阅读了多篇英语文章,拓宽了自己的词汇量和阅读理解能力。
3. 自我提升:为了提高自己的综合素质,我参加了学校举办的职业生涯规划讲座,了解了就业形势和求职技巧。
此外,我还参加了学校组织的羽毛球比赛,锻炼了身体,增强了团队协作能力。
二、学习方法1. 制定学习计划:为了提高学习效率,我制定了详细的学习计划,合理分配时间,确保每门课程都有充足的学习时间。
2. 主动学习:在课堂上,我积极发言,与老师和同学们互动,提高自己的思考能力。
课后,我主动查阅资料,解决学习中遇到的问题。
3. 做好笔记:在听课过程中,我认真做好笔记,总结重点难点,便于课后复习。
4. 定期总结:每周我都会对自己所学知识进行总结,梳理知识体系,巩固记忆。
三、收获与反思1. 收获:本周我在专业课程、英语学习、自我提升等方面都取得了显著的进步。
我对所学知识有了更深入的理解,英语水平也有所提高。
2. 反思:虽然本周取得了一定的成绩,但我也发现自己在学习过程中存在一些问题,如:学习计划执行不严格、对某些知识点的掌握不够牢固等。
在接下来的学习中,我将努力改进这些问题,提高自己的学习效果。
总之,本周我在学习上取得了一定的成果,但仍有很大的提升空间。
在今后的学习中,我会继续努力,不断提高自己的综合素质,为未来的发展打下坚实基础。
算法设计实践课程报告学院:计算机学院班级:学号:姓名:一、课程目的本课程设计为培养学生综合实践的能力,理论知识和实际有机的结合起来,锻炼学生实际分析问题和解决问题的能力,提高学生适应实际、实践编程的能力,使对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;}。
数据结构心得体会(6篇)心得体会是一种产生感想之后写下的文字,主要作用是用来记录自己的所思所感,是一种读书和学习实践后所写的感受文字,以下是我为大家收集的数据结构心得体会(6篇),仅供参考,欢迎大家阅读。
篇一数据结构心得体会通过本次课程设计,对图的概念有了一个新的熟悉,在学习离散数学的时候,总觉得图是很抽象的东西,但是在学习了《数据结构与算法》这门课程之后,我渐渐地体会到了其中的奥妙,图能够在计算机中存在,首先要捕获他有哪些详细化、数字化的信息,比如说权值、顶点个数等,这也就说明白想要把生活中的信息转化到计算机中必需用数字来完整的构成一个信息库,而图的存在,又涉及到了顶点之间的联系。
图分为有向图和无向图,而无向图又是有向图在权值双向相等下的一种特例,如何能在计算机中表示一个双向权值不同的图,这就是一件很奇妙的事情,经过了思索和老师同学的关心,我用edges[i][j]=up和edges[j][i]=up 就能实现了一个双向图信息的存储。
对整个程序而言,Dijkstra算法始终都是核心内容,其实这个算法在实际思索中并不难,或许我们谁都知道找一个路径最短的方法,及从顶点一步一步找最近的路线并与其直接距离相比较,但是,在计算机中实现这么一个很简洁的想法就需要涉及到许多专业学问,为了完成设计,在前期工作中,基本都是以学习C语言为主,所以铺张了许多时间,比如说在程序中,删除顶点和增加顶点的模块中都有和建图模块相互重复的函数,但是由于技术的缘由,只能做一些很累赘的函数,可见在调用学问点,我没有把握好。
不过,有了这次课程设计的阅历和教训,我能够很清晰的对自己定一个合适的水平,而且在这次课程设计中我学会了运用两个新的函数sprintf()和包涵在#include头文件中的输入函数。
由于课程设计的题目是求最短路径,原来是想通过算法的实现把这个程序与交通状况相连,但是由于来不及查找各地的信息,所以,这个方案就没有实现,我信任在以后有更长时间的状况下,我会做出来的。
数据结构心得体会6篇(经典版)编制人:__________________审核人:__________________审批人:__________________编制单位:__________________编制时间:____年____月____日序言下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!并且,本店铺为大家提供各种类型的经典范文,如工作总结、学习总结、工作计划、活动方案、条据文书、规章制度、应急预案、教学资料、作文大全、其他范文等等,想了解不同范文格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!Moreover, the shop provides you with various types of classic model essays, such as work summary, study summary, work plan, activity plan, documents, rules and regulations, emergency plans, teaching materials, composition, other model essays, etc.want to know different model essay formats and writing methods, please pay attention!数据结构心得体会6篇通过写一份心得体会,我们可以培养自己的观察力和思考力,心得体会是我们思维的推动力,让我们不断追求进步和创新,下面是本店铺为您分享的数据结构心得体会6篇,感谢您的参阅。
数据结构课程设计心得体会我是一名计算机学生,在这个专业中,我学习了许多理论知识。
在数据结构课程设计中,我开始了解到这些理论知识的实际应用。
在这里,我记录下我的心得和体会。
首先,数据结构是什么?数据结构是对数据的组织、管理和存储方式进行研究的一门学科。
数据结构的实现往往要借助于计算机编程语言。
数据结构的研究主要包括线性表、栈和队列、树和图等基础数据结构,以及各种高级数据结构和算法。
在数据结构课程设计中,我学习了很多经典的数据结构与算法的实现,如二叉树、排序算法等。
在学习的过程中,我深刻的体验到了理论知识的实际应用,这不仅让我更加深入的理解了课程的知识点,也为我今后的学习打下了坚实的基础。
其次,在数据结构课程设计中,我更多地体会到了团队合作的重要性。
一个成功的团队是由一群志同道合,相互协作、积极进取的人组成的。
在本次课程设计中,我们精心设计了程序的框架、写了详细的代码注释、进行了充足的测试和优化,而这些都离不开团队成员之间的通力合作和支持。
从中我学习到了如何更好的与人沟通合作,学会了主动去协调问题,也更加深入地理解了个人能力和团队的协作力之间的关系。
此外,在数据结构课程设计中,我开始学会如何去提高程序的执行效率。
我了解到,优秀的程序员需要运用巧妙的算法,采用高效的编程风格来编写程序,并且需要注重程序的代码结构和规范性等方面的要求。
除此之外,我还学会了如何使用一些高级的调试技巧,如断点调试等,来检查和修正程序的错误,从而让程序在运行中更加的稳定和高效。
总之,数据结构课程设计是一次非常有收获也非常难忘的经历。
通过这次实践,我深刻体验到了理论和实践相结合的巨大魅力,也在不断的学习中积累了更多的宝贵经验。
在今后的工作和学习中,我将继续不断提高自己,不断完善自己的技能水平,为自己的事业发展注入更多的动力和能量。
对数据结构课程的评价数据结构课程是一门非常重要的计算机科学基础课程,它涵盖了各种基本的数据结构及其操作,以及这些数据结构在计算机科学中的应用。
这门课程对于提高学生的算法设计和分析能力、培养解决问题的思维方式具有非常重要的作用。
以下是对数据结构课程的评价:优点:1.知识体系完整:数据结构课程的知识体系非常完整,从基本的数据结构到复杂的数据结构,从理论到实践都有详细的讲解,能够帮助学生全面了解数据结构的各个方面。
2.实用性强:数据结构在计算机科学中有着广泛的应用,无论是软件开发、系统设计还是算法研究都需要用到数据结构。
通过这门课程的学习,学生可以更好地理解和应用数据结构,提高自己的编程能力和算法设计能力。
3.培养解决问题能力:数据结构课程注重培养学生的问题解决能力,通过解决各种算法问题,学生可以学会如何分析问题、设计算法并优化解决方案,这种能力对于未来的学习和工作都非常有帮助。
不足之处:1.难度较大:数据结构课程难度较大,需要学生具备一定的编程基础和数学基础。
在学习过程中,学生需要理解各种数据结构的原理和操作,掌握各种算法的思路和实现方式,这对于初学者来说可能会有一定的难度。
2.实践性不强:虽然数据结构课程有实验环节,但实践性相对较弱。
学生需要通过编写代码来理解和应用数据结构,但实验内容相对单一,缺乏实际应用的场景和案例,这可能会影响学生对数据结构的理解和应用。
3.缺乏综合性项目:数据结构课程缺乏综合性项目,学生只是单纯地学习各种数据结构和算法,没有机会将它们综合应用到一个完整的项目中。
这可能会导致学生缺乏对数据结构的整体把握和实际应用能力。
为了提高数据结构课程的教学效果,建议教师在教学过程中注重实践性和应用性,通过引入实际应用的案例和项目,帮助学生更好地理解和应用数据结构。
同时,教师也可以采用多种教学方法和手段,如启发式教学、讨论式教学等,激发学生的学习兴趣和主动性。
另外,学校可以提供更多的学习资源和实践平台,如开放实验室、在线学习平台等,为学生提供更多的学习机会和实践经验。
数据结构课程实验报告数据结构课程实验报告引言:数据结构是计算机科学中非常重要的一门课程,它研究了数据的组织、存储和管理方法。
在数据结构课程中,我们学习了各种数据结构的原理和应用,并通过实验来加深对这些概念的理解。
本文将对我在数据结构课程中的实验进行总结和分析。
实验一:线性表的实现与应用在这个实验中,我们学习了线性表这种基本的数据结构,并实现了线性表的顺序存储和链式存储两种方式。
通过实验,我深刻理解了线性表的插入、删除和查找等操作的实现原理,并掌握了如何根据具体应用场景选择合适的存储方式。
实验二:栈和队列的实现与应用栈和队列是两种常见的数据结构,它们分别具有后进先出和先进先出的特点。
在这个实验中,我们通过实现栈和队列的操作,加深了对它们的理解。
同时,我们还学习了如何利用栈和队列解决实际问题,比如迷宫求解和中缀表达式转后缀表达式等。
实验三:树的实现与应用树是一种重要的非线性数据结构,它具有层次结构和递归定义的特点。
在这个实验中,我们学习了二叉树和二叉搜索树的实现和应用。
通过实验,我掌握了二叉树的遍历方法,了解了二叉搜索树的特性,并学会了如何利用二叉搜索树实现排序算法。
实验四:图的实现与应用图是一种复杂的非线性数据结构,它由节点和边组成,用于表示事物之间的关系。
在这个实验中,我们学习了图的邻接矩阵和邻接表两种存储方式,并实现了图的深度优先搜索和广度优先搜索算法。
通过实验,我深入理解了图的遍历方法和最短路径算法,并学会了如何利用图解决实际问题,比如社交网络分析和地图导航等。
实验五:排序算法的实现与比较排序算法是数据结构中非常重要的一部分,它用于将一组无序的数据按照某种规则进行排列。
在这个实验中,我们实现了常见的排序算法,比如冒泡排序、插入排序、选择排序和快速排序等,并通过实验比较了它们的性能差异。
通过实验,我深入理解了排序算法的原理和实现细节,并了解了如何根据具体情况选择合适的排序算法。
结论:通过这些实验,我对数据结构的原理和应用有了更深入的理解。
数据结构课程教学反思与改革近年来,数据结构课程在计算机科学专业中的重要性日益凸显。
然而,传统的教学方式在培养学生综合能力方面存在一定的不足。
为了提高学生的学习效果和动力,我们需要对数据结构课程进行反思,并进行相应的改革措施。
一、教学反思1. 教学内容过于理论化传统的数据结构课程普遍注重理论知识的讲解,却缺少实际应用的实践环节。
这导致学生更容易产生对课程的厌倦和学习兴趣的丧失。
2. 缺乏综合能力培养数据结构课程注重算法和数据存储结构的学习,却忽视了学生的综合能力培养,如问题解决能力、团队合作能力和创新思维能力等。
3. 缺少互动和实践传统的课堂教学模式中,学生大多数时间都是被动接受知识,缺乏主动参与和实践的机会。
这种模式无法激发学生的学习兴趣和动力。
二、改革措施针对上述问题,我们提出以下改革措施,以提高数据结构课程的教学效果。
1. 引入案例分析和实践项目在课程中引入实际案例和项目,让学生通过实际问题的分析和解决,将理论知识应用于实践中。
这样可以培养学生的问题解决能力和创新思维能力。
2. 采用问题导向的教学方法在课程中,教师可以提出一系列实际问题,引导学生运用所学的数据结构知识解决这些问题。
通过这种问题导向的教学方法,可以增强学生学习的目的性和积极性。
3. 鼓励合作学习和讨论为了培养学生的团队合作能力和互动能力,我们可以组织小组讨论和实践项目。
通过与同学合作解决问题,学生可以相互交流和学习,提高学习的效果和乐趣。
4. 应用开发和实验环节结合将应用开发和实验环节与理论教学相结合,让学生在实践中学习和应用数据结构。
例如,设计一个简单的应用程序,要求学生选择合适的数据结构进行实现,并测试其功能和性能。
三、总结数据结构课程的教学反思与改革是为了提高学生的学习效果和动力,培养他们的综合能力和创新思维能力。
通过引入实践项目、问题导向的教学方法、合作学习和应用开发等措施,可以使学生更好地掌握数据结构知识,并将其应用于实际问题的解决中。
数据结构实验报告总结设计题目:模拟计算器程序学生姓名:谢先斌系别:计算机与通信工程学院专业:计算机科学与技术班级:1班学号:541007010144指导教师:卢冰李晔XX 年 6 月 21 日郑州轻工业学院课程设计任务书题目模拟计算器程序专业、班级计算机科学与技术10-01班学号541007010144 姓名谢先斌主要内容:设计一个模拟计算器的程序,要求能对包含加、减、乘、除、括号运算符及SQR和ABS函数的任意整型表达式进行求解。
基本要求:要检查有关运算的条件,并对错误的条件产生报警。
主要参考资料:严蔚敏吴伟民编著《数据结构(C语言版)》清华大学出版社第44页栈、第52页表达式求值完成期限: XX年6月21日指导教师签名:课程负责人签名:XX年 6月 21 日一、设计题目模拟计算器的程序设计一个模拟计算器的程序,要求能对包含加、减、乘、除、括号运算符及SQR和ABS函数的任意整型表达式进行求解。
设计要求:要检查有关运算的条件,并对错误的条件产生报警。
二、算法设计的思想本程序设计主要是应用了栈,利用栈的“先进后出”原理,建立了两个栈,分别为运算符栈pOStack和运算数栈pDStack。
算法的基本思想(参考课本p53页)是:(1) 首先置操作数栈为pDStack空栈,表达式起始符为“=”,位运算符栈的栈底元素;(2) 依次读入表达式中的每个字符,若是操作数则进入pDStack栈,若是运算符则和pOStack栈的栈定运算符比较优先权后作相应操作,直到整个表达式求值完毕(即pOStack栈的栈定元素和当前读入的字符均为“=” )。
三、算法的流程图本程序的流程如下附图1所示:附图1 程序流程图四、算法设计分析首先创建了两个栈:typedef struct OPStack //定义运算符栈{char opStack;int top;}OPStack, *pOPStack;typedef struct DATAStack //定义运算数栈{double stack;int top;}DATAStack, *pDATAStack;来分别存放运算符和运算数。
课程总结(提要)
一、数据结构和抽象数据类型ADT
定义:一个数学模型以及定义在该模型上的一组操作。
构成一个抽象数据类型的三个要素是:
数据对象、数据关系、基本操作
数据结构(非数值计算程序设计问题中的数学模型)
·逻辑结构(描述数据元素之间的关系)
线性结构——线性表、栈、队列、串、数组、广义表
非线性结构——树和森林、二叉树、图
集合结构——查找表、文件
·存储结构(逻辑结构在存储器中的映象)
按“关系”的表示方法不同而分:
顺序结构—以数据元素在存储器中的一个固定的相对位置来表示“关系”
链式结构—以指针表示数据元素的“后继”或“前驱”
·基本操作(三类)
结构的建立和销毁
查找——引用型操作(不改变元素间的关系)
按“关系”进行检索
按给定值进行检索
遍历——访问结构中的每一个数据元素,且对每个元素只访问一次修改——加工型操作(改变元素间的关系)
插入
删除
更新(删除+插入)
二、线性结构
·线性表和有序表
——不同存储结构的比较
顺序表:可以实现随机存取;O(1)
插入和删除时需要移动元素;O(n)
需要预分配存储空间;
适用于“不常进行修改操作、表中元素相对稳定”的场合。
链表:只能进行顺序存取;O(n)
插入和删除时只需修改指针; O(1)
不需要预分配存储空间;
适用于“修改操作频繁、事先无法估计最大表长”的场合。
——应用问题的算法时间复杂度的比较
例如,以线性表表示集合进行运算的时间复杂度为O(n2),
而以有序表表示集合进行运算的时间复杂度为O(n)
·栈和队列——数据类型的特点及其应用范畴
·串——和线性表的差异:
数据对象不同(数据元素限定为单个字符)、基本操作集不同(串整体作为操作对象)、存储结构不同
−−串的模式匹配算法
·数组——只有引用型的操作,∴只需要顺序存储结构
多维到一维的不同映象方法:
以行序为主序(低下标优先)
以列序为主序(高下标优先)
·广义表——多层次的线性结构
特性:次序性、长度、层次性、深度、递归等
独有的特性:共享
存储结构的特点
三、非线性结构
−−树和森林、二叉树、图
•数据类型的定义(结构特点和基本操作)
•存储结构
•二叉树的特性及其证明方法
•遍历
·何谓“遍历”?对结构中的每个元素都访问到,且只被访问一次
·对非线性结构的遍历需要确定一条搜索路径
·两条搜索路径:深度优先搜索和广度优先搜索
·逻辑定义
深度优先搜索——以结构中的某个数据元素为起始点,首先访问该数据元素,然后依次以它的各个“后继”为起始点进行“深度优先搜索遍历”。
其特点为:在访问了起始数据元素之后,沿着某一条“路径”(后继)向前,直至“到底”,然后退回一步找另一个后继,再向前继续,……,直至所有通路都走遍。
广度优先搜索——以结构中的某个数据元素为起始点,首先访问该数据元素,然后先访问其所有后继;之后其它结点的访问次序由已被访问的结点的访问次序决定:先被访问的结点的后继“优先于”后被访问的结点的后继。
其特点为:在访问了起始数据元素之后,先访问它的所有后继,然后再依这些后继被访问的先后次序访问它们的后继,……,直至没有后继未被访问为止。
·算法的形式描述
深度优先搜索——通常采用递归的形式
二叉树(先序、中序、后序)、树/图(先根、后根)
一般形式算法的描述:
void DFSearch(ADT DS, ElemType v)
{ // 从v开始,对DS进行深度优先搜索遍历
if (DS) {
visit(v); (visited[v]=true;)
w=FirstSucc(v);
while (w) {
if (!visited[v]) DFSearch(DS, w);
w=NextSucc(DS, v, w);
}//while
}//if
}//DFSearch
不同数据结构(逻辑和存储)有不同写法。
例如对森林,起始点只有一个(第一棵树的根),只有两个后继,且各棵树互不相交,按搜索路径上的访问次序有先序遍历和中序遍历之分。
void PreOrder_F(CSTree T) {
// 对以T为根指针的森林进行先序遍历
if (T) {
visit(T->data);
PreOrder_F( T->firstchild ); // 先序遍历第一棵树的子树森林
PreOrder_F( T->nextsibling ); // 先序遍历其余树构成的森林}//if
} // PreOrder_F
或者从森林是树的集合角度来看遍历(依次从左至右依次先根遍历各棵子树) while(树) do PreOrder_T(树);
void PreOrder_T(CSTree T) {
// 对以T为根指针的树进行先根遍历
if (T) {
visit(T->data); p=T->firstchild;
while(p) {
PreOrder_T(p);
// 对以p 为根指针的子树进行先根遍历
p=p->next;
}//while
} // PreOrder_T
·由“访问”操作的不同可以实现不同的操作
具体问题具体分析,按分割求解的思想:
“递归基”考虑最简单的结构(“空集”/“只含一个元素”)
“归纳项”分析原问题和子问题之间的关系
·不同的问题要求不同的搜索路径
·“线索化”的过程即为在遍历过程中建立结点之间的线性关系
广度优先搜索——不能用递归(先进先出)
必须利用“队列”记下访问次序,以便由此确定以后的元素的访问次序
·对不同的存储结构,算法的差异
不同的存储结构表现在表示“后继”的方法不同
二叉树——二叉链表(静态、动态)、顺序表(只适用于完全二叉树)
树——孩子-兄弟链表、孩子链表(≡≡图的邻接表)、双亲链表
图——邻接表、邻接矩阵
具体算法采用何种存储结构由算法需要解决的问题而定
四、查找表——集合结构
·根据查找表所需进行的操作种类和期望达到的ASL来选择构造查找表的方法
顺序表、有序表(静态查找树)、索引顺序表 —— 静态查找表
二叉排序树、B-树和B+树、键树 —— 查找树
哈希表 —— 动态查找表也可用于表示静态查找表
各自的特点、操作的实现方法,注意 它们之间的相同点和不同点
例如:顺序表的特点是:结构简单,便于插入但不便于删除;平均查找长度较大ASL=O(n),查找树?哈希表?静态查找树和折半查找的关系?和动态查找树的区别?
—— 平均查找长度的计算公式对任何查找表都适用
下只考虑查找成功的平均查找长度,即n
p n i i 11=∑=,一般情况
关键在于如何计算C i
·判定树和ASL 的计算方法
——判定树用于描述查找方法,关键字在判定树上的层次恰为找到它时和给定值进行比较的次数。
注意判定树的画法取决于查找方法的本身而不是具体的算法。
判定树非程序流图
·哈希表的特点
是在关键字和记录的存储地址之间建立了一个映象关系,以此减少查找的盲目性,哈希表的最大特点是它的平均查找长度不是表长的函数,因此利用它可以设计出使平均查找长度控制在期望值范围内的查找表。
—— 如何构造哈希表以及如何计算它的C i 。
—— 在特殊的情况下,可以做到ASL=0
—— 无法画出它的判定树
—— 掌握各种构造哈希表的方法以及处理冲突的方法
五、内部排序
·进行排序的目的:得到有序表
∑=∑+=+=⎪⎪⎪⎪⎭⎫ ⎝⎛n i n i i 'C i q i C i p ASL 111
排序和查找相互关联,有时排序的过程也可以看成是一个动态造表的过程,如:插入排序;二叉查找树
·了解各种排序方法的特点以便灵活应用
例如:直接插入排序适用于“近似有序序列”;
快排的思想可用以“调整”;
选择排序、起泡排序和堆排序可用以“选出若干满足条件元素”;
各种排序方法的混合使用
·排序算法的描述
例如:一次划分、建堆
算法和存储结构的关系
注意排序时采用的链表为什么不是动态链表
·排序算法的时间复杂度及其简单分析方法
·各种排序方法的综合比较
时间性能——平均情况、最坏情况、最好情况
(从关键字的比较和记录的移动两个方面进行分析) 空间性能——需要的辅助空间
六、外部排序
·外部排序的基本过程及其访问外存的次数
·多路归并
·置换-选择排序和归并树
七、文件
·文件的各种组织方法的特点及其操作
顺序文件
索引文件
——索引的构造方法:
多级静态索引
动态索引(B-树和键树)
索引顺序文件−−VSAM文件和B+树
散列文件(直接存取文件)
·次关键字的索引构造方法
八、图
−−各种存储结构的定义、各个应用问题算法的执行过程九、算法时间复杂度的分析
掌握系统分析的方法。