数据结构与算法课程学习总结报告

2024-04-22

数据结构与算法课程学习总结报告(精选9篇)

篇1:数据结构与算法课程学习总结报告

“数据结构与算法”课程学习总结报告

1004012033 陈孝婕 10计本3 “数据结构与算法”这门课程对于计算机科学与技术系的学生来说是非常重要的课程。这门课程主要包括十个章节。

一.每章主要知识点总结和个人掌握情况

第一章主要要求学生掌握数据、数据类型、数据结构、算法及算法分析等基本概念和基础知识。另外,第一章结合课程学习要求,复习和掌握算法描述工具--C语言中的指针类型与指针变量、结构类型与结构变量、函数与参数、递归定义和递归函数、动态存储分配、文件操作、程序测试和测试集、测试数据的设计和程序调试等问题。

从这一章中我不仅学到了数据结构的基本概念和基础知识,了解到什么是数据结构,我们为什么要学习数据结构这门课程。而且复习了大一下学期所学的C语言程序课程设计中的算基本法语句。有利于数据结构与算法后面课程的学习。

第二章主要学习顺序表(包括顺序串)数据类型、数据结构、基本算法及相关应用。知识点包括顺序表的概念、数据结构定义、数据类型描述、基本算法的实现及其性能的分析等知识;还有“查找”和“排序”的概念,“查找”包括3种查找方式:简单顺序查找、二分查找、分块查找;“排序”包括直接插入排序、希尔排序、冒泡排序、快速排序、直接选择排序和归并排序(重点为二路归并排序)6种排序方式;掌握应用顺序表来进行查找和排序的各类算法以及不同的查找和排序算法间的性能差异。在此基础上,理解顺序串的相关应用。

从这一章中我学习到各种不同的查找方法和排序方式,其中二分查找作为重点查找方法我进行了重点学习,熟悉并熟练地运用二分查找并且了解到各种排序方法适合于不同的顺序表。对于顺序串的学习,我主要掌握了字符串的基本运算,包括:求串长strlen(S)、连接stract(ST1,ST2)、求子串substr(S,i,j)、比较串的大小strcmp(S,T)、插入insert(S1,i,S2)、删除delete(S,i,j)、子串定位index(S1,S2)、置换(replace(S1,i,j,S2)、replace(S,T,V)两种)。

第三章主要学习链表(单聊表、循环链表)的概念、数据结构、数据类型描述、基本算法以及链表相关应用。需要掌握各种链表的概念、数据结构定义、基本算法实现以及算法的性能分析等知识,掌握链表的相关应用方法,在此基础上掌握链串的相关知识。

通过这一章我学习了另一种数据结构——链表,在逻辑结构上,链表与顺序表一样,也是线性逻辑结构;单链表借助“地址”的概念,使用了链式存储结构,产生了一种新的数据结构——链表,链表的基本操作是地址运算,在此基础上构成的链表基本算法的特点也就不同,从链表算法的功能看,链表的基本运算与顺序表基本相同,但实现方法和过程与顺序表是不同的,链表可分为静态链表和动态链表两种。这一章我学习到的实际应用是链表的创建、插入和删除等基本操作。循环链表的建立和查询方法。

第四章主要知识点是在两种不同的存储结构下设计的堆栈,即顺序栈和链栈。主要内容是顺序栈和链栈的概念、数据类型、数据结构定义和基本运算算法及其性能分析。通过对本章的学习,要求掌握顺序栈及链栈的数据类型描述、数据结构、基本算法及其性能分析等知识。在此基础上,了解堆栈的相关应用,掌握应用堆栈解决实际问题的思想及方法。

通过对这一章的学习,我了解了堆栈的概念,堆栈的原理、创建方法以及使用方式。“后进先出”是其基本原则。利用堆栈可以轻松方便的解决对称问题以及括号匹配等问题。堆栈与顺序表、链表不同的是,堆栈只能对一端的数据元素进行操作,即只在栈顶进行元素的插入和删除。掌握顺序栈和链表的存储结构是学习堆栈的要素之一。堆栈是一类常用的数据结构,被广泛应用于各种程序设计中。

第五章的重点知识是在顺序存储和链接存储下的两种队列——顺序(循环)队列和链队

列的数据结构、基本运算及其性能分析以及应用。通过本章的学习,要求掌握顺序队列(重点是循环队列)及链队列的概念、数据类型描述、数据结构、基本算法及其性能分析等知识。在此基础上,了解队列的相关应用,掌握应用队列来解决实际问题的思想及方法。

通过这一章的学习,我掌握了队列的定义,概念,创建以及“对头删除”,“队尾插入”的原则。重点了解了判断循环队列空和满的判断条件。同堆栈一样,队列也是一种具有线性逻辑结构、运算受限制的数据结构。与堆栈只在一端(栈顶)进行元素的插入和删除运算不同的是,队列是在对头进行插入,而在队尾完成数据元素的删除,所以队列的算法和适用的应用问题与堆栈有很大的区别。队列作为一类常用的数据结构,被广泛应用于各种程序设计中。

第六章主要学习数组、系数矩阵和广义表的基本概念、集中特殊矩阵的存储结构及基本运算,在此基础上学习特殊矩阵的计算算法与广义表应用等相关问题。通过本章的学习,要求掌握特殊矩阵的压缩存储结构,在该存储结构下元素的定位方法,理解稀疏矩阵的计算和广义表的存储结构及其基本运算。了解矩阵与广义表的相关应用。

通过这章的学习和前几章的比较,我了解到前几章的线性结构中的数据元素都是非结构的原子类型,即每一个元素都是不可再分解的。本章讨论的数组和广义表等数据结构可以看成是在前几章线性结构基础上的一个扩展:组成该数据结构的数据元素本身也是一个数据结构。矩阵计算应该数值计算方面的问题,由于矩阵和数组的关系以及特殊矩阵存储结构的复杂性,进而使得特殊矩阵的存储结构和算法也表现出其特殊性,所以数据机构课程应该解决其计算问题。

第七章的学习重点是二叉树的概念、数据类型、数据结构定义和各种基本算法,在此基础上介绍二叉树的一些应用问题。通过本章的学习,我掌握了二叉树概念及其性质、二叉树的逻辑结构和存储结构等知识,掌握二叉树的建立、遍历、线索化等基本概念和算法及性能分析,能熟练应用二叉树这章结构来解决一些实际问题,如哈夫曼树及哈夫曼编码、查找与排序(二叉树排序)等问题。了解堆栈排序及其算法等知识。二叉树是非线性数据结构,是树形结构的一种特殊形式。在现实生活有许多数据关系可抽象为树或二叉树的形式。本章中的二叉树的概念及其性质、二叉排序树、存储结构、遍线索(化)、基本算法为重点内容,二叉排序树的应用为难点内容。

第八章的学习重点是树和森林的数据结构、基本算法及其性能分析,树和森林与二叉树间的转化算法等,在此基础上介绍树的应用——B-树。通过本章的学习,我掌握了树和森林的概念和性质、数据结构、树的基本算法及性能分析、树与二叉树间的转换及其算法,并能应用B-树来实现数据元素的动态查找。舒适一种非线性结构,它在二叉树的基础上做了更为一般化的扩展,而森林是树的集合。在树结构中,每一个元素最多只有一个前驱,但可能有多个后继。现实生活中的家族关系、单位的组成结构等,均可抽象为树的形式。

第九章学习重点是散列结构的相关知识,学习常用的散列函数和冲突处理方法,散列表的常用算法及其性能分析,通过本章的学习,我掌握了散列结构和散列函数的相关概念,掌握散列结构的存储(散列表)的相关概念,要求掌握散列冲突处理方法(散列法)的相关知识,并能灵活运用散列法解决应用问题。

散列结构是使用散列函数建立数据结点关键字与存储地址之间的对应关系并提供多种当数据节点存储地址发生“冲突”时的处理方法而建立的一种数据结构。散列结构的查找等运算效率是很高的,本章中的散列函数、散列结构、散列表、散列法的基本概念和基本算法是重点,线性探测散列算法、链地址法散列算法和散列法的应用是难点。

第十章的学习重点是图的定义及性质,图的四种存储结构,图的两种遍历算法以及图的典型应用,包括最小生成树、最短路径、拓扑排序和关键路径等。通过本章学习,我掌握了图的概念和基本性质,图的存储结构(邻接矩阵和邻接表)及其基本算法、图的遍历及算法、图的最小生成树普利姆算法或者克鲁斯卡尔算法、图的最短路径迪杰斯特拉算法和弗洛伊德算法、有向无环图拓扑排序算法。了解了图的逆邻接表、十字链表、邻接多重表存储结构及其基本算法、关键路径求解算法,并能灵活运用图的不同的数据结构和遍历算法解决复杂的应用问题。

二.课程学习体会

在学习开始的时候,老师就明确提出它不是一种计算机语言,不会介绍C语言的变成语言,而是通过学习可以设计出良好的算法,高效地组织数据。一个程序无论采用何种语言,其基本算法思想不会改变。联系到在大一和大二上学期学习的C和C++语言,我深刻认识到了这一点。“软件开发好比写作文,计算机语言提供了许多华丽的辞藻,而数据结构则考虑如何将这些辞藻组织成一篇优秀的文章来。”在学习这门课中,要熟悉对算法思想的一些描述手段,包括文字描述、图形描述和计算机语言描述等。因此,计算机语言基础是必须的,因为它提供了一种重要的算法思想描述手段——机器可识别的描述。

这门课结束之后,我总结了学习中遇到的一些问题,最为突出的,书本上的知识与老师的讲解都比较容易理解,但是当自己采用刚学的知识点编写程序时却感到十分棘手,有时表现在想不到适合题意的算法,有时表现在算法想出来后,只能将书本上原有的程序段誊写到自己的程序中再加以必要的连接以完成程序的编写。针对这一情况,我会严格要求自己,熟练掌握算法思想,尽量独立完成程序的编写与修改工作,只有这样,才能够提高运用知识,解决问题的能力。

三.对《数据结构与算法》课程教学的建议

1、建议在上课过程中加大随堂练习的分量,以便学生能当堂消化课堂上学习的知识,也便于及时了解学生对知识点的掌握情况,同时有助于学生上课积极思考,不会开小差。

2、建议在课时允许的情况下,增加习题课的分量,通过课堂的习题讲解,加深对知识点的掌握,同时对各知识点的运用有一个更为直观和具体的认识。

以上便是我对《数据结构与算法》这门课的学习总结,我会抓紧时间将没有吃透的知识点补齐。今后我仍然会继续学习,克服学习中遇到的难关,在打牢基础的前提下向更深入的层面迈进!

篇2:数据结构与算法课程学习总结报告

数据结构与算法是计算机程序设计的重要理论技术基础,它不仅是计算机科学的核心课程,而且也已经成为其他理工专业的热门选修课。随着高级语言的发展,数据结构在计算机的研究和应用中已展现出强大的生命力,它兼顾了诸多高级语言的特点,是一种典型的结构化程序设计语言,它处理能力强,使用灵活方便,应用面广,具有良好的可移植性。通过学习,先报告如下:

一、数据结构与算法知识点

本学期学的《数据结构与算法》这本书共有十一个章节:

第一章的内容主要包括有关数据、数据类型、数据结构、算法、算法实现、C语言使用中相关问题和算法分析等基本概念和相关知识。其中重点式数据、数据类型、数据结构、算法等概念;C语言中则介绍了指针、结构变量、函数、递归、动态存储分配、文件操作、程序测试与调试问题等内容。

第二章主要介绍的是线性逻辑结构的数据在顺序存储方法下的数据结构顺序表(包括顺序串)的概念、数据类型、数据结构、基本运算及其相关应用。其中重点一是顺序表的定义、数据类型、数据结构、基本运算和性能分析等概念和相关知识。二是顺序表的应用、包括查找问题(简单顺序查找、二分查找、分块查找)、排序问题(直接插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、归并排序)、字符处理问题(模式匹配)等内容。本章重点和难点在查找和排序问题的算法思想上,6种排序方法的性能比较。

第三章主要介绍的是线性逻辑结构的数据在链接存储方法下数据结构链表的相关知识。主要是单链表、循环链表的数据类型结构、数据结构、基本运算及其实现以及链表的相关应用问题,在此基础上介绍了链串的相关知识。在应用方面有多项式的相加问题、归并问题、箱子排序问题和链表在字符处理方面的应用问题等。本章未完全掌握的是循环链表的算法问题和C的描述。

第四章介绍在两种不同的存储结构下设计的堆栈,即顺序栈和链栈的相关知识,了解堆栈的相关应用,掌握应用堆栈来解决实际问题的思想及方法。本章主要内容是顺序栈和链栈的概念、数据类型、数据结构定义和基本运算算法及其性能分析。本章堆栈算法思想较为简单,所以能较好掌握。

第五章主要介绍顺序存储和链接存储方法下的两种队列、顺序(循环)队列和链队列的数据结构、基本运算及其性能分析以及应用。顺序队列(重点是循环队列)和链队列的概念、数据类型描述、数据结构和基本运算算法及其性能分析等。本章同堆栈有点类似,算法思想较为简单,所以能较好掌握;但难点重在循环队列队空、队满的判断条件问题。第六章“特殊矩阵、广义表及其应用”将学习数组、稀疏矩阵和广义表的基本概念,几种特殊矩阵的存储结构及其基本运算,在此基础上学习特殊矩阵的计算算法与广义表应用等相关问题。本章的重点是相关数据结构的存储结构及其基本运算算法。掌握了特殊矩阵的压缩存储结构,在该存储结构下元素的定位方法,理解了稀疏矩阵的计算和广义表的存储结构。

第七章“二叉树及其应用”的知识结构主要是:非线性结构数据二叉树的定义、性质、逻辑结构、存储结构及其各种基本运算算法,包括二叉树的建立、遍历、线索化等算法。在此基础上,介绍二叉树的一些应用问题,包括哈夫曼编码问题、(平衡)二叉排序树问题和堆排序问题等。

第八章“树和森林及其应用”介绍树和森林的数据结构、基本算法及其性能分析,树和森林与二叉树之间的转换算法等,在此基础上介绍树的应用---B-树,应用B-树来实现数据元素的动态查找。本章基本掌握树和森林的概念和性质、数据结构、树的基本算法及性能分析,树和二叉树间的转换及其算法,并用应用B-树来实现数据元素的动态查找未能掌握好。

第九章“散列结构及其应用”是逻辑结构“集合型”的数据元素在散列存储方法下的数据结构及其应用知识内容。主要介绍散列函数的概念、散列结构的概念、散列存储结构的概念---散列表、散列函数和散列表中解决冲突的处理方法---开放定址法、链地址法以及散列表的基本算法及其性能分析。本章概念较为多,所以掌握不太好。

第十章“图及其应用”是逻辑结构为“图形”的数据结构及其应用知识内容,主要介绍图的定义和基础知识,图的2种存储结构。图的基本算法以及图的典型应用问题(最小生成树、最短路径、拓扑排序和关键路径等)。

二、对各知识点的掌握情况

我对各知识点的掌握情况总结如下:

第一章不太难,能基本掌握。但关系全书的时间性能分析有些未能全部掌握。第二章本章重点和难点在查找和排序问题的算法思想上,6种排序方法的性能比较。本章未掌握的为希尔排序、快速排序、归并排序的时间复杂度分析。第三章,对链表掌握还好,对其数据结构进行了分析,有循环链表,掌握的不是很好,对其中一些用法不熟练。第四章堆栈,本章堆栈算法思想较为简单,所以能较好掌握,但表达式计算问题未掌握好的。第五章的循环队列队空、队满的判断条件问题掌握的不是很好。第六章的重点是相关数据结构的存储结构及其基本运算算法。掌握了特殊矩阵的压缩存储结构,在该存储结构下元素的定位方法,理解了稀疏矩阵的计算和广义表的存储结构。第七章对二叉树掌握较好,其概念,存储,遍历有很好的掌握。就是对二叉排序树有点生疏,它的生成算法不是很会。第八章树树与二叉树之间的转换,森林与二叉树的转换算法思想基本掌握。第九章散列的一些知识,没有深入学习,大概了解了散列存储结构散列表,散列函数,冲突的处理方法。第十章了解了图的逆邻接表的存储结构,关键路径求解算法未能掌握好,不能灵活运用图的不同数据结构和遍历算法解决复杂的应用问题。

三、学习体会

通过学习数据结构与算法,让我对程序有了新的认识,也有了更深的理解。同时,也让我认识到,不管学习什么,概念是基础,所有的知识框架都是建立在基础概念之上的,所以,第一遍看课本要将概念熟记于心,然后构建知识框架。并且,对算法的学习是学习数据结构的关键。在第二遍看课本的过程中,要注重对算法的掌握。对于一个算法,读一遍可能能读懂,但不可能完全领会其中的思想。掌握一个算法,并不是说将算法背过,而是掌握算法的思想。我们需要的是耐心。每看一遍就会有这一遍的收获。读懂算法之后,自己再默写算法,写到不会的地方,看看课本想想自己为什么没有想到。对算法的应用上,学习算法的目的是利用算法解决实际问题。会写课本上已有的算法之后,可以借其思想进行扩展,逐步提高编程能力。

四、对课程教学的建议

1、感觉上课时的气氛不是很好,虽然大部分人都在听,可是效果不是很好。所以希望老师能在授课中间能穿插一些活跃课堂氛围的话题,可以是大家都非常关心的一些内容,这样既让大家能在思考之余有一个放松,也能够提高学生的学习积极性和学习效率。

2、学习的积极性很重要,有时候我们花了很长时间去写实验报告,也很认真的去理解去掌握,可是最后实验报告可能就只得了一个C,抄的人反而得A,这样的话很容易打击学生的积极性,在后面的实验报告中没动力再去认真写。所以希望老师能在这方面有所调整。

篇3:数据结构与算法课程学习总结报告

关键词:数据结构,算法,C程序设计,计算机教学

1、引言

“算法与数据结构”是计算机科学与技术、软件工程、网络工程等相关专业的一门专业基础课,也是这些专业课程体系中的核心课程以及四门考研课程之一。在计算机科学与技术专业的课程体系中,“算法与数据结构”课程具有承上启下的重要作用,它不仅是一般程序设计的基础,也是开发操作系统、数据库系统、中间件和应用程序的基础;其教学内容不但巩固了已修的“C程序设计”、“离散数学”、“计算机导论”等课程所学知识,还为“数据库系统原理”、“操作系统”、“编译原理”等后续课程的开设以及相关实验教学环节的顺利完成奠定基础。所以“算法与数据结构”课程的教学质量和学习效果直接影响学生对专业知识的掌握和理解程度,直接影响计算机专业人才的培养质量。因此,“算法与数据结构”课程的教学改革和建设具有非常重要的现实意义。

2、教学现状

2.1教学内容及目的

作为计算机科学与技术专业的一门重要基础课程,“算法与数据结构”主要讲授用计算机解决实际问题过程中所涉及到的各种数据的组织方法、存储结构,以及在各种结构上执行的插入、删除、查找等操作,目的在于培养学生的计算思维能力。主要教学内容包括:数据结构和算法设计与分析的基本知识,线性表、堆栈、队列、二叉树、树、图等各种基本数据结构的定义、存储结构,常用的排序、查找等非数值算法以及应用。

“算法与数据结构”课程的教学目的是使学生熟练地掌握各种数据的内在逻辑关系(逻辑结构)及其在存储器中的表示方法(存储结构),以及一些基本操作的算法实现,了解相关的概念、知识和算法的典型应用。通过这门课程的学习,使得学生在软件开发过程中能够根据待解决的问题或者求解的对象合理选择数据结构,进而设计算法和开发程序,并为学习“操作系统”、“数据库系统原理”等后续课程奠定基础。

2.2课程的特点和存在的问题

目前,“算法与数据结构”课程在专业教学中的基础性作用得到了国内外高校的广泛关注。从计算机专业的课程体系来讲,大一、大二年级普遍开设导论、C程序、离散数学等课程,大三、大四开设软件工程、数据库系统原理、操作系统、算法设计与分析、编译原理等。“算法与数据结构”作为专业的核心课程,一般在大二下学期开设,它依赖于前期的基础课程,又为后续专业课程的开设奠定基础,在低年级课程和高年级课程间起到衔接和过渡作用。它主要讲述数据的逻辑结构和存储结构及其插入、删除、查找、排序等操作和对应的算法;通过该课程的学习,将进一步提高学生的数据描述能力和程序设计能力。“算法与数据结构”课程内容多、概念多、方法多,教学内容抽象、逻辑性强,相应的实验环节要求较高,编程工作量大,许多概念需要通过上机编程序进行深入理解和巩固,这些特点决定了该门课程无论是教,还是学,都具有较大的难度。

在实际教学过程中,“算法与数据结构”是与其它课程相对独立,其教学内容的组织也过于独立,往往没有从课程体系的角度组织教学,导致其教学内容与其他相关课程脱节,系统性不强;教学过程中缺少与日常生活和工作密切相关的直观案例。这种教学方式使得数据结构这门抽象的课程变得更加乏味和枯燥,直接影响到学生的学习兴趣和学习效果,严重妨碍了学生专业知识的系统性建构,也不利于调动学生学习的积极性和主动性,切实影响到数据结构乃至计算机专业所有后续课程的教学效果。

此外,“算法与数据结构”对先修课程的依赖性较大,特别是程序设计课程。目前许多高校将“C程序设计”的授课学时普遍压缩到48课时,其中还包括实验上机环节,教学过程中往往没有足够的学时讲授指针、结构体和动态链表等教学内容。而“算法与数据结构”课程的学习必须以数组、指针、结构体、动态链表等知识为基础,要面对的是树的存储和遍历、图的存储、最小生成树、最短路径、拓扑排序、堆、基数排序等一些复杂算法,程序设计学习环节的薄弱给“算法与数据结构”课程教学及其实验环节的正常开设造成了很大困难。

3、“算法与数据结构”课程的教学改革

3.1立足课程体系,突出课程地位

“算法与数据结构”是计算机科学的基础,其课程内容在计算机科学相关领域的应用十分广泛。例如堆栈、散列表及树在编译系统中的使用;堆栈、队列、树等在操作系统中的使用;线性表、多链表及索引树等被数据库系统中采用进行数据管理;而目前流行的智能推荐和搜索、自动驾驶、深度学习、图像理解等领域,因求解问题性质和规模的差异涉及到不同的数据结构,如搜索树及各种有向图等。正是因为数据结构在各个领域中的广泛应用,奠定了其在计算机科学与技术专业中的核心地位,成为数据库、操作系统等高年级课程的先导课程,在专业课程体系中具有非常重要的地位。因此,在实际教学过程中应充分认识“算法与数据结构”课程的核心地位,把握好与其它课程间的关系和联系,注意与先修课程和后续课程的衔接,合理组织教学内容,确保本课程教学质量的同时为后续课程的顺利开设奠定基础。

3.2合理构建课程体系,加强实践环节,确保教学质量

“算法与数据结构”课程教学内容抽象,理论性强,学习内容不直观,难以理解和掌握。鉴于以上特点,通常采用上机实验通过编写程序来加深对各种数据结构的理解,特别是各种数据结构的存储结构以及操作方法。为了确保教学效果,我们构建了理论教学+课内实验+课程设计三位一体的多层次课程体系,在讲授理论教学内容的同时,强化实践教学上机环节,让学生一方面通过课堂教学学习新的理论知识和算法设计的精髓,另一方面通过不断地上机编程实验来深入理解理论教学内容,最后通过课程设计环节进一步提高综合运用程序设计、计算机导论、离散数学等课程所学知识,进而解决实际问题的能力。

在实践教学环节,构建了由基础性实验、综合设计性实验、课程设计组成的系列化、多层次实践教学体系。基础性实验要求学生将理论课上讲的抽象数据类型上机编程实现,进而深入理解抽象数据类型、算法设计和程序实现之间的关系;综合设计性实验是在基础性实验的基础上,给出题目,学生综合运用所学知识,自己设计数据结构、定义数据类型和存储结构,从而解决涉及多个知识点的综合性问题;课程设计则给出面向实际应用问题的一系列实践题目,如航班信息管理、个人信息查询、校园导游、文件加密解密等,由学生自己分析问题,确定算法,设计数据结构,并编程实现,从而锻炼学生综合运用“算法与数据结构”的相关知识解决实际问题的能力;课程设计以小组形式进行,小组成员可以相互探讨,要求每名学生完成问题分析、总体结构设计、用户界面设计、程序实现与测试的一系列过程,进而培养学生以小组(团队)形式协作开发大型软件的能力,培养学生的团队精神和合作意识;最后要求学生进行答辩和提交设计报告,从而锻炼学生的口头表达能力和写作能力,促进学生综合素质的提高。

3.3强化先修课程,确保教学效果

“算法与数据结构”课程包括理论和实践两部分教学内容。其中,理论教学部分需要学生很好地理解和掌握其先修课程中的一些关键知识和概念,如“离散数学”中的集合及其运算,“计算机导论”中的计算机组成,以及“C程序设计”中的数组、指针、函数、结构体、链表等。特别是“算法与数据结构”课程的实践上机教学环节大都采用C语言或者C++来编程完成,若程序设计的相关知识掌握不好将严重影响“算法与数据结构”课程的教学和学习。因此,在课程教学大纲的制定过程中,应认真梳理“算法与数据结构”课程所需要的基础知识,并反馈到其先修课程教学大纲的制定过程,最终落实到实际的教学过程中,以确保在“算法与数据结构”课程开课前学生已具备相应的基础知识。

4、结束语

“算法与数据结构”作为计算机科学与技术及其相关专业的一门核心课程,在专业课程体系中起到承上启下的重要作用,也是培养学生计算思维和程序设计能力的一门重要课程。为了确保“算法与数据结构”课程的教学质量和学习效果,应该充分认识到“算法与数据结构”在计算机专业课程体系中的地位和作用,认真梳理与先修课程和后续课程间的关系,注意课程间教学内容的衔接和过渡,加强“C程序设计”等先修课程的教学,特别是“C程序设计”中数组、指针、结构体、动态链表等教学内容;构建合理的实践教学体系,通过上机实验编程加深对理论教学知识的理解和掌握;从多方面积极开展教学研究和改革,确保“算法与数据结构”课程的教学效果,真正发挥该门课程在专业课程体系中的核心作用,为“数据库系统原理”、“操作系统”、“编译原理”等后续课程的学习奠定基础。

参考文献

[1]耿国华,“算法与数据结构”的课程改革与教学资源建设[J],计算机教育,2008,11:25-27

[2]刘万伟,薛源,罗宇,李暾,计算机专业课程体系与操作系统课程的衔接[J],计算机教育,2013,15:1-3

[3]史文秀,《数据结构》课程整体教学模式的建构[J],甘肃联合大学学报(自然科学版),2013,5:105-108

篇4:数据结构与算法课程学习总结报告

【摘 要】针对在数据结构与算法实验教学中如何提高学生的编程和算法设计能力,分析并指出了在实验教学中普遍存在的问题,结合实验课的教学改革,开发实验平台,以期有效激发学生的学习兴趣和积极性,培养动手和创新能力。

【关键词】数据结构与算法 实验改革 平台建设

【中图分类号】 G 【文献标识码】A

【文章编号】0450-9889(2014)07C-0132-03

数据结构与算法实验是计算机专业学生必修基础课数据结构与算法的配套实验课程,是培养学生程序设计技能必不可少的重要环节。其目标之一是培养学生能运用理论知识与算法技术分析解决实际问题,能运用高级程序设计语言编程实现算法。从近年实验情况来看,在上机编写程序实现具体算法时遇到的种种问题,效果不容乐观,学生很难按时完成实验所要求的内容。

一、实验教学存在的问题与分析

数据结构与算法实验是一门实践性很强的技术基础课,经过多年实验教学分析,发现普遍存在如下主要问题:

(一)课程抽象,实验难度大

数据结构具有一定的抽象性,学生面对抽象概念在学习过程中常会遇到困难,基本每本理论教材在呈现概念时都会受到多方面限制,比如篇幅的限制,省略了算法细节部分或只给出伪代码,由学生自己补充,学生需要将算法用程序设计方法实现,完成有一定难度和技巧的程序设计并上机调试运行。对编程基础稍微薄弱的学生来说,就会出现不小的困难。

(二)实验相关资料偏少

由于学生基础薄弱,实验前又没有更多的相关实验资料进行预习,仅靠看课本理论和实验时的几个学时难以完成实验所要求的任务,也就谈不上创新人才的培养。

(三)学生程序设计语言课程基础薄弱

数据结构与算法课程是第四学期开设,对于很多先修课程要求高,高级程序设计语言是大学生进校第一、二学期学习,第一学期学习过程序设计思想,第二学期学习面向对象程序设计思想,由于大部分同学高中没接触过计算机语言学习,对过程程序设计思想还没掌握透,第二学期的面向对象程序设计学习又开始,学习非常吃力;导致常用的一些语法结构,如指针和结构体等内容难于理解。而这些语法恰恰是程序设计语言教学时的难点,也正好是学生完成数据结构实验必须掌握的内容,这给部分学生学习带来了一定困难。

(四)编程语言难

数据结构与算法编程语言描述主要用到C++语言,并大量用到了指针、链表和结构体等运算,这部分内容正好是大多数学生掌握知识点薄弱的环节,导致学生很难用高级语言将教材中的算法描述出来,由于问题的堆积、实验的欠账,容易使学生丧失学习兴趣和信心,导致学生间抄袭程序或实验报告的现象。

(五)编程技巧差

普通学生在低年级只编写过功能单一、结构简单的程序;而从功能单一的简单程序向涉及算法和稍复杂程序的数据结构编写过渡学习时,需循序渐进的方式和细致的引导,紧密结合理论教学。学生一下从简单编程直接到复杂的程序设计,不仅不适应,且设计技巧性较差。

二、实验教学改革目标的提出

根据以上学生实验时出现的诸多问题,特提出该课程的实验改革目标:

一是紧密配合理论教学,通过相关实验,帮助学生加深对数据的逻辑结构、存储结构、算法思想和具体实现等各个环节的整体理解,强化学生“结构——算法——编程”三者密切相关的意识,让学生思考和发现利用数据结构解决实际应用问题的有效方法,从而使学生分析和解决问题的能力得到锻炼和提高。

二是因材施教,让原本不同水平和能力起点的学生通过数据结构实验,能力和水平都有所提高,并且有兴趣有信心学好数据结构课程。

三是培养学生多方面能力,比如团队精神,口头表达能力,对学生全方面发展起到较好的推动作用。

三、调整实验项目内容,使其更加符合学生的认知规律

数据结构与算法实验内容主要是编程实验,提高学生的实践编程能力,巩固和强化理论课的教学效果。为了保证和提高实验教学质量,加深对课堂知识的理解,培养学生动手能力和思维能力,尝试对数据结构与算法实验项目进行重新设计,主要内容有:

针对编程基础较薄弱的学生,我们开发了数据结构与算法实验教学平台,学生在该平台上可获知实验相关的更多内容,通过平台引导学生重点回顾程序设计语言的基础知识,特别是数组和指针等有关操作。通过这些辅助手段,使学生对将要编写程序的一些语法和程序规则有所复习和掌握。还可通过平台对实验原理的动画演示,得到帮助和启发,从而更好更快地完成实验内容。

每个实验内容以章节为单位安排,依据实验教学目的,针对计算机相关专业所要达到的不同实验教学目标,以及考虑学生个体差异,每个实验项目都设置基础必做题和附加选做题两部分内容。这两类实验都需要紧密结合理论教学。必做题相对简单,目的在于帮助学生掌握基础知识。对于该部分题目,学生容易完成,能提高学生学习积极性并增强学习信心;选做题针对学有余力的学生,各个实验项目中的必做题均设计详细的实验准备内容,用于引导学生更好地进行实验前预习准备工作;主要在于培养和鼓励学生的学习兴趣和扩大知识面,进一步培养学生应用能力和创新意识,保证基础弱的同学学习兴趣,也提高了编程能力强的同学动手能力。例如,与线性表一章理论教学相配合的实验项目是多项式加减法,这个实验是对线性链表的建立、插入、删除、遍历等进行综合运算,对数据结构与算法第一实验内容来说稍有难度,可作为选作题或增加实验学时。在与栈一章理论教学相配合的实验项目是迷宫,这部分实验内容要求掌握回溯法和栈的基本运算等知识,有一定难度;用括号匹配作为必做题,能培养学生独立钻研,有助于学生解决问题能力的训练。

四、实验教学方法探究

实验前学生必须先预习和熟悉实验教学平台,了解实验内容的目的和要求,理解算法,描述语言的语法,查看相关资料,写预习报告。

通过多年实验教学中实验完成情况分析,软件工程专业的学生语言掌握较好,大部分学生能按时完成实验项目,其它专业的学生实验完成情况较差;由此,实验编程语言可以因学生而异,除软件工程专业的学生采用面向对象程序设计C++外,其它专业主要采用C语言描述,并且可增加前期语言学习时间。只有编程语言掌握扎实,数据结构与算法实验才能很好地完成。

开发数据结构与算法实验网络教学平台系统,该平台主要包含有课程介绍、在线课程、互动学习、下载资料等模块。有针对性地对每一个实验项目进行详细讲解和实验原理分析的动画演示,将抽象的数据结构问题制作为教学动画,借助形象的案例理解抽象的概念。教学内容利用Web页面为基本元素出现在站点中,学生通过访问站点来进行交互式学习。以辅助学生自主学习为主要目的,解决学生实验时无从下手的局面,启发学生思维,促进学生程序设计能力的提高。平台系统流程图如图1所示。

在线课程是教学平台核心部分,也是学生对数据结构与算法实验加深理解的重要环节,该平台从实验预习,到实验原理算法的演示,再通过在线课堂的视频教学、在线测试题训练及各种原理进行拓展教学。为了方便学生学习较抽象的数据结构与算法,能顺利进行程序编写,该教学平台还包含有18个flash动画用于原理算法演示,主要包括栈和队列、线性表、递归、查找与排序、树、图等内容,每个flash动画都有实验原理及主要代码实现过程,能更加形象展示数据结构的原理。例如:栈是一种先进后出的数据结构,在对栈原理进行动画设计时,根据用数组实现栈的特点,采取对栈先进行初始化的代码模块来对栈进行初始化,之后运行相应代码模块观察压栈出栈过程,同时还能观察到栈中数据的变化。在大部分flash动画演示过程中,flash页面左侧是代码部分,能体现当前执行的代码,并与右侧的动画演示及讲解分析一一对应。演示过程中如用户需要重新开始,还可点击“重新开始”按钮。这些flash动画演示将代码与动画有机的结合在一起,将抽象的代码转换为有形的动画,大大方便学生学习和对实验内容的理解。

如对栈原理进行动画演示的flash点击界面中压栈代码动画效果,该动画效果包括等待入栈的数字入栈的动画效果和位于等待区域的数字前移的动画效果。等待入栈的数字、入栈的动画效果和位于等待区域的数字前移的动画效果如图3所示。

图3 压栈的动画效果图

该平台互动学习是一个教师和学生互动的场所,实现动态交互的功能,教师能添加、更改、删除各种资源,学生、教师可以查看各种资源库里的资源。同时,学生可从平台上下载练习题和测试练习题资料,练习题有主要算法描述,可帮助学生进一步理解每个章节的算法原理,测试练习题有自动报错功能。

五、改革数据结构实验考核方式

让学生对以前所做实验作一个分析和总结。具体操作方案如下:首先将学生自由分组,小组成员共同从以前做过的实验项目选做题中选择一个进行程序的分析设计和编码实现,要求考虑程序的编写规范,程序的执行效率等方面。考核时,由实验教师从该小组随机抽取学生到讲台进行讲解和演示,根据程序完成情况和学生演示情况,决定该小组成员的平均得分,而每位学生的具体得分由小组成员内部根据该学生在该程序实现中的工作情况决定。通过这种方式,能培养学生的团队意识,达到互学互助的效果,同时也锻炼了学生的表达能力。

数据结构与算法实验环节教学改革的创新之处在于依托一门编程语言以及所开发的实验教学平台,因材施教,根据不同专业实际情况,综合考虑进行实验项目、实验内容和实验准备的合理设置,帮助学生在实验课上找到自己的最好学习方式,提高实验教学质量。

【参考文献】

[1]吴兵.高校计算机文化基础课程网络学习题库的研发[J].实验技术与管理,2011(2)

[2]朱洪浩.数据结构课程“工程化”实践教学模式研究[J].赤峰学院学报(自然科学),2013(15)

[3]马晓波,王翠茹.《数据结构》实践教学改革探讨[J].内蒙古农业大学学报(社会科学版),2010(02)

[4]赵耀红,孙宇.数据结构实验教学的实践与探索[J].长春大学学报,2012(04)

篇5:数据结构与算法课程学习总结报告

1、根据“数据结构与算法”教学大纲中各章“知识点”总结学习内容。

2、根据“数据结构与算法”教学大纲中各章“知识点”的要求,总结和分析本人对各知识点掌握的情况(逐知识点进行)。

3、学习“数据结构与算法”课程的学习体会。

4、对“数据结构与算法”课程教学的建议。

篇6:数据结构与算法总结

070401301507计本(3)班张浩

本学期开设的《数据结构与算法》课程已经告一段落,现就其知识点及其掌握情况、学习体会以及对该门课程的教学建议等方面进行学习总结。

一、《数据结构与算法》知识点

在课本的第一章便交代了该学科的相关概念,如数据、数据元素、数据类型以及数据结构的定义。其中,数据结构包括逻辑结构、存储结构和运算集合。逻辑结构分为四类:集合型、线性、树形和图形结构,数据元素的存储结构分为:顺序存储、链接存储、索引存储和散列存储四类。紧接着介绍了一些常用的数据运算。最后着重介绍算法性能分析,包括算法的时间性能分析以及算法的空间性能分析。

第二章具体地介绍了顺序表的概念、基本运算及其应用。基本运算有:初始化表、求表长、排序、元素的查找、插入及删除等。元素查找方法有:简单顺序查找、二分查找和分块查找。排序方法有:直接插入排序、希尔排序、冒泡排序、快速排序、直接选择排序及归并排序等。最后介绍了顺序串的概念,重点在于串的模式匹配。

链表中数据元素的存储不一定是连续的,还可以占用任意的、不连续的物理存储区域。与顺序表相比,链表的插入、删除不需要移动元素,给算法的效率带来较大的提高。链表这一章中介绍了链表的节点结构、静态与动态链表的概念、链表的基本运算(如求表长、插入、查找、删除等)、单链表的建立(头插法和尾插法)以及双向循环链表的定义、结构、功能和基本算法。

堆栈与队列是两种运算受限制的线性结构。其基本运算方法与顺序表和链表运算方法基本相同,不同的是堆栈须遵循“先进后出”的规则,对堆栈的操作只能在栈顶进行;而队列要遵循“先进先出”的规则,教材中列出了两种结构的相应算法,如入栈、出栈、入队、出队等。在介绍队列时,提出了循环队列的概念,以避免“假溢出”的现象。

第六章介绍了特殊矩阵和广义表的概念与应用。其中,特殊矩阵包括对称矩阵、三角矩阵、对角矩阵和稀疏矩阵,书中分别详细介绍了它们的存储结构。稀疏矩阵的应用包括转置和加法运算等。最后介绍了广义表的相关概念及存储结构,关于它的应用,课本中举了m元多项式的表示问题。

第七章二叉树的知识是重点内容。在介绍有关概念时,提到了二叉树的性质以及两种特殊的二叉树:完全二叉树和满二叉树。接着介绍二叉树的顺序存储和链接存储以及生成算法。重点介绍二叉树的遍历算法(递归算法、先序、中序和后序遍历非递归算法)和线索二叉树。二叉树的应用:基本算法、哈弗曼树、二叉排序树和堆排序。

树与二叉树是不同的概念。教材介绍了树和森林的概念、遍历和存储结构,还有树、森林和二叉树的相互关系,树或森林怎样转化成二叉树,二叉树又如何转换为树和森林等算法。散列结构是一种查找效率很高的一种数据结构。本章的主要知识点有:散列结构的概念及其存储结构、散列函数、两种冲突处理方法、线性探测散列和链地址散列的基本算法以及散列结构的查找性能分析。

最后一章介绍了图的概念及其应用,是本书的难点。图的存储结构的知识点有:邻接矩阵、邻接表、逆邻接表、十字链表和邻接多重表。图的遍历包括图的深度优先搜索遍历和广度优先搜索遍历。其余知识点有:有向图、连通图、生成树和森林、最短路径问题和有向无环图及其应用。有向无环图重点理解AOV网和拓扑排序及其算法。

二、对各知识点的掌握情况

总体来看,对教材中的知识点理解较为完善,但各个章节均出现有个别知识点较为陌生的现象。现将各个章节出现的知识点理解情况列举如下。

第一章中我对数据和数据结构的概念理解较为透彻,熟悉数据结构的逻辑结构和存储结构。而对算法的时间、空间性能分析较为模糊,尤其是空间性能分析需要加强。

第二章,顺序表的概念、生成算法理解较为清晰,并且熟悉简单顺序查找和二分查找,对分块查找较为含糊;排序问题中,由于冒泡排序在大一C语言课上已经学习过,再来学习感觉很轻松。对插入排序和选择排序理解良好,但是,在实际运用中仍然出现明显不熟练的现象。由于在归并排序学习中感觉较吃力,现在对这种排序方法仍然非常模糊,所以需要花较多的时间来补习。此外串的模式匹配也是较难理解的一个地方。

链表这一章中,除对双向循环链表这一知识点理解困难之外,其他的知识点像单链表的建立和基本算法等都较为熟悉。

接下来的有关堆栈以及队列的知识点比较少,除有关算法较为特殊以外,其余算法都是先前学过的顺序表和链表的知识,加上思想上较为重视,因此这部分内容是我对全书掌握最好的一部分。不足之处仍然表现在算法的性能分析上。

在学习第六章时感觉较为吃力的部分在于矩阵的应用上,尤其对矩阵转置算法的C语言描述不太理解。稀疏矩阵相加算法中,用三元组表实现比较容易理解,对十字链表进行矩阵相加的方法较为陌生。

第七章是全书的重点,却也有一些内容没有完全理解。在第一节基本概念中,二叉树的性质容易懂却很难记忆。对二叉树的存储结构和遍历算法这部分内容掌握较好,能够熟练运用,而对于二叉树应用中的哈弗曼树却比较陌生。

第八章内容较少,牵涉到所学的队列的有关内容,总体来说理解上没有什么困难,问题依旧出现在算法的性能分析上。

散列结构这一章理解比较完善的知识点有:基本概念和存储结构。散列函数中直接定址法和除留余数法学得比较扎实,对数字分析法等方法则感觉较为陌生。对两种冲突处理的算法思想的理解良好,问题在于用C语言描述上。

最后一章,图及其应用中,图的定义、基本运算如图的生成等起初理解有困难,但随着学习深入,对它的概念也逐步明朗起来。邻接矩阵、邻接表和逆邻接表掌握较好,而对十字链表和邻接多重表则较为陌生。感觉理解较为吃力的内容还有图的遍历(包括深度和广度优先遍历),最小生成树问题也是比较陌生的知识点。最短路径和AOV网学习起来感觉比较轻松,而对于C语言描述却又不大明白。

三、学习体会

接触这门课程以前,我对该课程所学的内容有许多疑点,例如:这门课是否是在介绍一种新的计算机语言?如果不是,那么学习这门课程的用途是什么?为什么市面上各种介绍数据结构的资料采用了不同的计算机语言,如C、C++还有Java?我的C语言学得不好,对学习这门课是否有影响„„

在学习伊始,老师就明确提出它不是一种计算机语言,不会介绍新的关键词,而是通过学习可以设计出良好的算法,高效地组织数据。一个程序无论采用何种语言,其基本算法思想不会改变。联系到在大一和大二上学期学习的C和C++语言,我深刻认识到了这一点。“软件开发好比写作文,计算机语言提供了许多华丽的辞藻,而数据结构则考虑如何将这些辞藻组织成一篇优秀的文章来。”在学习这门课中,要熟悉对算法思想的一些描述手段,包括文字描述、图形描述和计算机语言描述等。因此,计算机语言基础是必须的,因为它提供了一种重要的算法思想描述手段——机器可识别的描述。

这门课结束之后,我总结了学习中遇到的一些问题,最为突出的,书本上的知识与老师的讲解都比较容易理解,但是当自己采用刚学的知识点编写程序时却感到十分棘手,有时表现在想不到适合题意的算法,有时表现在算法想出来后,只能将书本上原有的程序段誊写到

自己的程序中再加以必要的连接以完成程序的编写。针对这一情况,我会严格要求自己,熟练掌握算法思想,尽量独立完成程序的编写与修改工作,只有这样,才能够提高运用知识,解决问题的能力。

四、对《数据结构与算法》课程教学的建议

1、建议在上课过程中加大随堂练习的分量,以便学生能当堂消化课堂上学习的知识,也便于及时了解学生对知识点的掌握情况,同时有助于学生保持良好的精神状态。

2、建议在课时允许的情况下,增加习题课的分量,通过课堂的习题讲解,加深对知识点的掌握,同时对各知识点的运用有一个更为直观和具体的认识。

篇7:数据结构与算法个人总结

重点内容:排序运算的算法、检索运算的算法,本部分所占分值较高,在11分左右; 考试点:数据顺序存储与链式存储、栈与队列的操作、二叉树的存储及遍历(或周游)、霍夫曼算法及其应用、各类排序算法;

知识部分: 1.数据结构的内容:

数据的逻辑结构:分为线性结构和非线性结构

数据的存储结构: 是数据的逻辑结构在存储器里的实现;

数据的运算:插入、删除、排序、查找等; 2.数据的存储结构分为:顺序存储结构和链式存储结构。3.单链表与双链表的插入与删除这里不再赘述,百度一下吧!

4.栈与队列的基本运算有:插入、删除、读取头元素到变量中,原栈或队列保持不变、判断是否为空、将栈或队列置为空

5.串的基本运算有:链接、赋值、求长度、全等比较、求子串、求子串的位置及替换等。6.广义表:广义表是线性表的推广,也称列表。

广义表的特点:

广义表的元素可以使字表,且字表的元素还可以是字表;

广义表可以被其他广义表所共享;

广义表可以是递归的表,机本身的一个字表;

7.多维数组与稀疏矩阵的存储比较复杂,请用百度查找相关内容,不再赘述;

8.树:树并不重要,重要的知识点是二叉树,对树理解不透彻的同学,请用百度搜索。9.二叉树:

二叉树的重点内容包括:

二叉树的遍历:中序遍历、前序遍历、后续遍历;(重点考察)完全二叉树(定义):在一棵二叉树中,若最多只有最下面两层的节点数可小于2,且最下面一层的节点集中于最左边的位置,则称此二叉树为完全二叉树; 树的先根次序周游对应于二叉树的前序周游(遍历),树的后根次序周游对应于二叉树的中序周游(遍历)

10.二叉树的存储结构:链式存储结构与顺序存储结构。

二叉树的链式存储:

是指二叉树的各节点随机存储在内存空间中,节点之间的关系用指针标示;

二叉树链表的节点包括三个:左指针,数据域,右指针;其中左指针指向左子节点,有指针指向右子节点;也可以是指一个父指针(parent)用于指向父节点; 二叉树链表的重要知识点:一个n节点的二叉树链表,有n+1个空指针域;

二叉树的顺序存储:

二叉树的顺序存储就是按一定的次序,用一组地址连续的存储单元存储二叉树的节点元素;

完全二叉树的顺序存储的性质:

用数组A[1….n]顺序存储完全二叉树的各节点,则当i>0,且i<=[(n-1)/2]时,节点A[I]的右子女是节点A[2i+1],否则节点A[I]没有右子女;同理当i>0且I<=[n/2],节点i的左子女节点是2i,否则没有!11.哈夫曼树: 基本定义术语:

节点的路径长度:从根节点到该节点的路径上分支的数目;

树的路径长度:树中所有的节点的路径长度之和;

哈夫曼树:在有n个叶子节点,并带有相同权值的二叉树中,必定存在一个二叉树,使其带权路径长度最短,这样的二叉树被称为“最优二叉树”或“哈夫曼树”

如下图:

12.排序算法:

常考的排序算法有:插入排序、冒泡排序、选择排序、快速排序、堆排序

插入排序: 首先先建立一个空列表,然后放入一些已排序的有序数列(自定),然后然后从原列表中取出一个数,并放入新列表,仍使新列表保持有序;重复这个动作直到原列表为空;

冒泡排序:顾名思义,就像冒泡一样(可以从小到大,也可以从大到小),大的升上去,小的降下来。首先将所有元素放入工作列表中,从列表的第一位数字到倒数第二位数字,逐个比较一个数和它的下一位,如果这个数大于它的下一位,则将它和它的下一位交换,重复该 步骤,直到不能交换

选择排序:设数组中存储了n个待排序数字,从数组中找到最小值和最大值分别放在数组的最左边和最右端,然后选出次小值和次大值放到左数第二位和右数第二位,……,最后建立完整的顺序;

快速排序:这是一种高效排序方法:

实践证明,快速排序是所有排序算法中最高效的一种。它采用了分治的思想:先保证列表的前半部分都小于后半部分,然后分别对前半部分和后半部分排序,这样整个列表就有序了。这是一种先进的思想,也是它高效的原因。因为在排序算法中,算法的高效与否与列表中数字间的比较次数有直接的关系,而“保证列表的前半部分都小于后半部分”就使得前半部分的任何一个数从此以后都不再跟后半部分的数进行比较了,大大减少了数字间不必要的比较。但查找数据得另当别论了。

堆排序:与前面的算法都不同,它是这样的:

首先新建一个空列表,作用与插入排序中的“有序列表”相同。

找到数列中最大的数字,将其加在“有序列表”的末尾,并将其从原数列中删除。

重复2号步骤,直至原数列为空。

堆排序的平均时间复杂度为nlogn,效率高(因为有堆这种数据结构以及它奇妙的特征,使得“找到数列中最大的数字”这样的操作只需要O(1)的时间复杂度,维护需要logn的时间复杂度),但是实现相对复杂(可以说是这里7种算法中比较难实现的)。

看起来似乎堆排序与插入排序有些相像,但他们其实是本质不同的算法。至少,他们的时间复杂度差了一个数量级,一个是平方级的,一个是对数级的。

算法的时间复杂度:

平均时间复杂度

插入排序 O(n2)

冒泡排序 O(n2)

选择排序 O(n2)

快速排序 O(n log n)

堆排序 O(n log n)

归并排序 O(n log n)

基数排序 O(n)

篇8:数据结构与算法课程学习总结报告

《数据结构与算法》是计算机专业的主干基础课程,学生从其先修课程《高级语言程序设计》过渡到《数据结构》的学习时,在教学中,学生跨过《高级语言程序设计》入门《数据结构与算法》课程所遇到的重点及难点是(1)栈和队列的应用及区别;(2)深度优先和广度优先搜索算法的应用及区别。栈和队列的概念很简单而且很直观,但以栈和队列作为数据结构的深度优先和广度优先搜索算法却是学生突破高级语言学习进入数据结构与算法学习时需要首先掌握的一对专业基础算法。

栈和队列应用的教学误区是用多个孤立、简单、无意义和不直观的例子分别讲解栈和队列的应用。突破这一教学难点的关键是寻找一个统一的、直观的、而且有趣的典型实例进行精讲,该实例同时包含了栈和队列的应用及其区别并且直观地呈现了深度优先和广度优先搜索算法的应用及其区别,统一了栈和队列的应用。学生通过该实例的精学,就可以很容易掌握基于数据结构栈和队列的深度优先和广度优先搜索算法,从而快速入门课程学习。这个典型实例就是迷宫问题。

1 基于数据结构栈和队列的深度优先和广度优先搜索算法

(1)栈是插入和删除操作仅在表的同一端进行的线性表。允许插入和删除的一端称为栈顶,另一端称为栈底。存储结构很简单:插入和删除操作限制在同一端进行的一维数组。其基本操作为入栈和出栈。栈如图一所示。

虽然数据结构栈很简单,但以它为数据结构的算法(深度优先搜索算法或回溯法)很有用。

深度优先搜索算法DFS:(1)访问栈顶元素一个邻接的未访问的节点,标记它,并入栈。(2)在不能执行(1)时,若栈不空,则出栈一个元素。(3)如果不能执行(1)和(2)时,则完成了搜索。

正如算法名称那样,深度优先搜索所遵循的搜索策略是尽可能“深”地搜索。

(2)队列是插入和删除各在一端进行的线性表。允许删除的一端叫队头,允许插入的一端叫队尾。存储结构很简单:插入和删除操作各在一端进行的一维数组。其基本操作为入队和出队。队列如图二所示。

虽然数据结构队列很简单,但以它为数据结构的算法(广度优先搜索算法)很有用。

广度优先搜索所遵循的搜索策略是尽可能“浅”地搜索。

深度优先搜索算法BFS:

(1)首先将始节点放入队列中。

(2)从队列中出队第一个节点,并检验它是否为终节点。如果是终节点,则结束搜索。否则将它所有尚未访问过的邻节点入队。

(3)若队列空,结束搜寻并回传“找不到终节点”。

(4)重复步骤(2)。

广度优先搜索的显著特点是,从始结点到终结点的代价和结点的深度成正比,用广度优先得到的解一定是最优解。

2 深度优先和广度优先搜索算法的典型实例——迷宫问题

迷宫问题1:找出迷宫从入口到出口的行走路径。

迷宫问题2:找出迷宫从入口到出口的行走步数最少的路径(最短路径)。

例如在图三所示迷宫中,#格表示墙,空格表示通道。

在迷宫中规定行走规则为:每次行走方向为左、下、右、上四个方向,每次行走到下1个相邻格。

2.1 迷宫问题1的解决:栈的应用----深度优先搜索算法

(1)问题求解方法分析

最自然的求解方法是回溯法,从入口出发,固定按照左、下、右、上四个方向的顺序找到为通道的相邻格中第一个,若找到,则下一步走到该相邻格,否则返回上一步(回溯),按照同样的规则找下一步,如此循环,直到走到出口或退出出口(无路径)为止。

(2)问题的表示--数据结构

a.为了保证每一个行走位置都有在左、下、右、上四个方向上的下一个位置,为迷宫加一圈边墙,如图四所示。

b.迷宫可以用二维数组maze[m][n]来表示,数组中的元素0表示通道,1表示墙,2表示路径(已走过),3表示死路(四个方向的下一格均不为0)。迷宫入口为maze[1][1],出口为maze[m-2][n-2]。

c.任意时刻在迷宫中的行走位置可用点的行列下标(i,j)表示,在任一行走位置maze[i][j]时,下一位置的行走方向为左、下、右、上四个。

d.固定按顺时针搜索当前位置的四个运动方向右、下、左、上的下一位置。

e.用一个栈保存行走的路径(从栈底到栈顶),栈元素为行走位置的坐标(i,j)。如例中定义栈为int s[100][2],其中每个单元存放2个行列下标i和j。

(3)算法

for(入口位置进栈,入口位置元素标2;栈不空且出口位置未进栈;)

if(栈顶右位置元素为0){右位置进栈;右位置元素标2}

else if(栈顶下位置元素为0){下位置进栈;下位置元素标2}

else if(栈顶左位置元素为0){左位置进栈;左位置元素标2}

else if(栈顶上位置元素为0){上位置进栈;上位

置元素标2}

else{栈顶元素标3;栈顶位置出栈}

if(栈空)printf("无路径");

else输出栈底到栈顶或输出Maze;

(4)程序

2.2 迷宫问题2的解决:队列的应用----广度优先搜索算法

(1)问题求解方法分析

最自然的求解方法是,从入口出发,固定按照左、下、右、上四个方向的顺序找到所有为通道的相邻格,并走到所有为通道的相邻格,如此循环,直到走到出口为止,最先走到的这条路径即为最短路径。

(2)问题的表示--数据结构

a.为了保证每一个行走位置都有左、下、右、上四个方向的下一个位置,为迷宫加一圈边墙,如图四所示。

b.迷宫可以用二维数组maze[m][n]来表示,数组中的元素0表示通道,1表示墙,2表示路径(已走过),3表示死路(四个方向的下一格均不为0)。迷宫入口为maze[1][1],出口为maze[m-2][n-2]。

由如图四所示迷宫确定的二维教组如下:

c.任意时刻在迷宫中的行走位置可用点的行列下标(i,j)表示,在任一行走位置maze[i][j]时,下一位置的行走方向为左、下、右、上四个。

d.固定按顺时针搜索当前位置的四个运动方向右、下、左、上的下一位置。

e.用一个队列保存行走的所有路径,队列元素为行走位置的坐标和该位置的前趋在队列中的下标所构成的一个三元组(i,j,k)。如例中定义队列为int q[100][3],其中每个单元存放2个行列下标i和j及前趋在队列中的下标k。

(3)算法

for(入口位置入队,标2;队列不空且出口位置未入队;)

{if(队头右位置元素为0){右位置进队列;右位置元素标2}

if(队头下位置元素为0){下位置进队列;下位置元素标2}

if(队头左位置元素为0){左位置进队列;左位置元素标2}

if(队头上位置元素为0){上位置进队列;上位置元素标2}

队头元素标2

出队

}

if(队列空)printf("无路径");

else输出队列中的最短路径或输出Maze;

(4)程序

3 迷宫问题的教学价值

迷宫问题是一个在《数据结构》课程教学中很有价值的实例,它的价值体现如下:(1)实际问题的计算机表示,如迷宫用一个二维数组表示,路径用栈和队列表示;(2)迷宫问题同时提出完备的两个问题的求解:求出一个解与求出最优解;(3)迷宫问题同时作为栈与队列应用入门的经典范例,问题直观、有趣、通俗易懂并且跨越了高级语言编程学习的水平;(4)迷宫问题同时使用了学生应首先掌握的一对专业水平的算法:深度优先搜索算法和广度优先搜索算法。(5)通过教师精讲学生精学迷宫问题后,学生可以找到数据结构与算法学习的一个很好的入口。

参考文献

[1]萨尼著.汪诗林等译.数据结构、算法与应用--C++语言描述[M].北京:机械工业出版社,2000.

[2]唐策善,李龙澎编著.数据结构——用C语言描述[M].北京:高等教育出版社,1995.

篇9:数据结构与算法课程学习总结报告

关键词:应用转型;算法与数据结构;任务驱动;教学改革

中图分类号:TP312 文献标识码:A

教育部于2013年,提出一项重大的改革,即计划将大约600所地方性高等本科院校转型为应用型本科院校,2014年被列入教育部当年工作要点[1]。在高等院校向应用型本科转型的形势下,高校教学面临着新的机遇和挑战。商洛学院作为陕西省首批应用转型试点高校,实现毕业时与社会、企业零距离对接,完成高等学校为社会输送有用人才的最终目标[2]。

算法与数据结构课程是计算机相关专业的专业基础课程,是设计各种应用软件的重要基础,是我校电子信息科学与技术专业课程体系中的核心专业课程。本文主要针对当前教学过程的问题,进行探讨研究,提出一种新的教学模式,达到教与学的有机结合[3]。

一、课程教学改革的必要性与紧迫性

算法与数据结构课程主要涵盖数据结构的阐述分析、应用以及经典算法的应用,主体内容比较抽象,难以直观描述,掌握相对困难。此外,电子信息科学与技术专业的学生计算机基础知识薄弱,电子和计算机专业之间培养差异,导致电子信息科学与技术专业学生学习更加困难。随着互联网行业的迅猛发展,网络教学资源的日渐丰富以及算法与数据结构课程地位的愈加重要,传统教学模式中的问题日益突出[4]。

(一)数据结构课程自身特点

(1)高度抽象化,需要扎实的数理逻辑、图论、高等数学、拓扑几何、离散数学和数值分析等理论基础;(2)内容涵盖面广泛丰富。(3)隐含的技术方法丰富,各部分问题解决方式种类多样、没有固定解法、灵活性强。

(二)应用转型下发展算法与数据结构课程的教学目标

(1)重视算法与数据结构基础理论知识学习,理解数据逻辑、数据存储及数据运算等基本概念术语;(2)从实际问题出发,培养学生运用算法与数据结构的基本理论知识分析解决实际问题的能力;(3)重视学生实践动手能力和工程项目思想的培养。

二、传统教学过程中现存问题

根据长期从事算法与数据结构的教学过程,发现当前算法与数据结构教学中主要存在以下一些问题。

(一)难理解:本课程需要较高的逻辑思维和抽象思维能力,学生联系实际比较困难这一问题始终萦绕在整个教学过程中。

(二)难把控:电子信息科学与技术专业本科二年级学生,其计算机基础、建模能力、软件工程的思想薄弱。

(三)难实现:体现在遇到问题不知如何数据结构类型;面对具体算法不清楚如何进行优化;书本上的程序不能直接运行,学生自主学习有一定困难[5]。

(四)难应用:数据结构相关实验的课程设计主要采用高级程序语言(如C,C++)等来编写,我校电科专业学生对该程序语言的掌握程度直接影响到数据结构课程的实际应用情况。

三、教学模式改革与探索

针对现有传统教学中存在的问题,为了提高学生算法与数据结构应用能力,需完善并加强实践教学内容。

(一)调整课程体系

当前教学是依据传统的知识理论体系顺序授课:然而当前应用转型环境下这种模式已难以适应。根据学生学习认知一般规律及我校电子信息科学与技术专业自身特点,在传统教学基础上进一步优化课程培养体系,针对每一知识点配备相应实践项目,将理论与实践有机结合。

(二)优化教学手段

传统课堂教学主要以教师粉笔板书讲授为主,不能用动态直观的方式讲解抽象知识,难以激发学生学习热情,无法达到课题教学目的。

1.将微课引入教学中

借助微课这一新兴教学模式,将算法与数据结构课程重点、难点设计开发成网络视频资源,供学生课后自主学习。我们将算法与数据结构中每一个知识点的内容,制作成微教案、微视频、微练习、微点评、微互动等传至课程网络中心。

2.将案例驱动引入教学中

案例驱动的算法与数据结构教学方法,是将教学案例引入到课程教学过程中。教师通过一个完整案例的分析解决,借助板书、多媒体等手段与学生互动,达到培养学生发现问题、分析问题、解决问题的能力。

3.加强课外创新实践活动

算法与数据结构课程需要增加学生的课外创新实践活动。具体通过以下方式开展:(1)组建算法和数据结构学习创新小组,定期举行学习经验研讨交流活动,分享实际设计过程的困难、解决途径和最新成果;(2)定期组织以算法为核心竞赛活动,(3)鼓励学生申报研究学习与科技创新性实验项目,组织参加省市级或国家级各类学科竞赛。

3.改革课程考核模式

传统实验课的课程,实验动手部分只占10%,很多学生把重点放在报告书写上,为适应应用转型发展,加强学生实践能力,课程考核提出以下改革方案:(1)平时(考勤+开卷随堂测试+课堂表现),占学期总成绩的10%;(2)课程上机实验(源程序+实验报告)30%;(3)期末卷面成绩60%;(4)鼓勵学生到相关优秀企业进行培训实习

四、结语

针对当前电子信息科学与技术专业算法与数据结构教学模式中培养目标及存在的主要问题,在转向应用型本科院校新形势下,为培养创新型、应用型人才,提高学生逻辑思维、编程运算等能力,本文主要从课程体系调整、教学手段优化、创新实践教学加强、考核模式改革共4个方面都出发,以提高算法和数据结构应用能力为教学目标,结合工程项目与市场实际需求,指导并加强实践教学。

参考文献:

[1]陶影,张斌.数据结构实验教学应重视算法设计与分析能力的培养[J].实验室研究与探索,2008,12:119-122.

[2]张铭,赵海燕,王腾蛟,宋国杰,高军.北京大学“数据结构与算法”教学设计[J].计算机教育,2008,20:5-11.

[3]唐剑梅,谭平.《数据结构与算法设计实训》课程教学研究[J].软件导刊,2016,01:193-194.

[4]李治军,廖明宏,张岩.数据结构与算法课程设计教学模式的探讨[J].计算机教育,2006,02:54-56.

[5]彭伟. CDIO模式下嵌入式技术专业数据结构与算法设计教学思考[J].软件导刊(教育技术),2012,02:90-95.

上一篇:国有股权转让流程图下一篇:赵佳宇作文选集2012.3建