数据结构与算法

发布 2021-05-02 16:52:28 阅读 2005

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

一、 总结学习内容。

数据结构这么课主要学习如何组织数据和设计算法,要完整地讲解和理解数据结构(逻辑结构、存储结构和相关算法)的定义及其实现的方法。在所学教材中,我们一共学习了十章节的内容:

在第一章中,我们主要学习了,数据和数据类型,研究数据结构的三个方面,即逻辑结构、存储结构和相关算法。也学习了如何对一个算法进行时间和空间性能的分析,与此同时,我们还会够了有关c语言的相关知识。

在第二章中,我们学习了顺序表及其的相关应用,包括,顺序表的基本概念, 顺序表的逻辑结构, 顺序表属于线性逻辑结构。顺序表的存储结构:数据元素ai 与ai-1所占存储空间首地址间的关系满足:

loc(ai)= loc (ai-1) +x

顺序表数据元素ai的的存储位置与数据元素a1的存储地址(顺序表的首地址)间的关系为:

loc(ai)= loc (a1) +i-1)*x

是一种顺序存储结构

顺序表的运算集合

(1)置空表sqlsetnull ( l )(2)求表长sqllength ( l )(3)按序号取元素sqlget (l ,i )(4)按值查找(定位)sqllocate ( l , x )(5)判表满sqlempty(l)(6)插入sqlinsert (l , i ,x) (7)删除 sqldelete (l , i )

其次,我们学习了顺序表的应用,分为三方面,查找、排序、字符处理问题。在查找中介绍了三种方法,即简单顺序查找、二分法查找和分块查找,学习了每种方法的算法,及对其时间和空间性能的分析,及三种算法之间的比较。在排序中我们又分为插入排序:

直接排序、希尔排序;交换排序:冒泡排序、快速排序;选择排序:直接选择排序、归并排序。

在以上排序中,我们学习了它们的具体算法,及它们各自和之间的算法性能的分析。在字符处理问题中,我们学习了,顺序串的逻辑结构,存储结构和其基本运算。

由于顺序表的使用存在一定的局限性,所以我们又进一步学习了数据结构的另一种存储形式——链表。

在第三章中,按照研究数据结构的方式,我们学习了链表的逻辑结构、存储结构和相关算法,只是由于链表根据不同的性质分为不同的种类,进而来学习、研究,它可分为动态的、静态的,单链表、循环链表(又分为单循环、双循环),在链表应用中,我们学习了关于多项式相加问题、两个链表的归并问题、链表在字符处理的应用——链串问题,知道它们的具体算法,及性能方面的知识。

在第四章中,主要学习了,堆栈及其应用,具体为:堆栈的概念、逻辑结构、和其基本的算法,由于堆栈可以分为顺序栈和链栈,所以我们学习了,两种存储结构下的堆栈的概念,及相关算法,及对这些算法的性能的分析,在堆栈的应用方面,我们主要学习了表达式的计算问题、数制的转换问题、括号匹配问题,了解如何使用算法解决这些问题。

在第五章中,我们学习了与堆栈一样具有线性逻辑存储结构的另一种存储形式——队列,所以在学习队列时,具体的学习内容形式和堆栈的学习大相近庭,只是在顺序队列中,增加了对顺序循环队列学习,在队列应用主要学习了基数排序问题多关键字排序问题链式基数排序问题。

在第六章中,学习了,矩阵和数组的关系,及对一些特殊矩阵的压缩存储,这些特殊矩阵包含对称矩阵、三角矩阵、,稀疏矩阵,在稀疏矩阵中,对其存储结构我们学习了,三元组表和十字链表的存储,对于广义表我们学习了它的相关概念和存储形式;而对于矩阵的应用方面我们学习了稀疏矩阵的转置、加法运算问题。

在第七章中,学习了二叉树的基本概念、性质和二叉树的存储结构,更为重要的知识点要为二叉树的遍历算法,分为先序、中序、后序,且其遍历分为递归和非递归两种算法;其次,就是学习了线索二叉树,关于它的概念,及二叉树的线索化、线索化二叉树的查找,在二叉树的应用方面学习了其基本算法:计算叶子节点数、计算二叉树的深度、二叉链表的建立等;还有就是哈夫曼树的建立及其算法;二叉排序树的概念,存储结构,及其对应的结点查找、结点删除、生成算法。平衡二叉树的概念,以及如何将失衡二叉树调整为平衡二叉树;堆和堆排序的概念,及其相应的算法。

在第八章中,介绍了树和森林的基本概念、性质、遍历,树、森林、二叉树之间的转化规则,及其对应的算法,同时,也学了树和森林的存储结构算法、性能分析,对于树的应用主要介绍了它的查找和插入算法。

在第九章中,主要学习了散列结构的基本概念,及其存储结构——散列表,还有就是散列结构的相关算法如何实现。

在第十章中,主要介绍了图的相关概念和性质,重点介绍了图的两种存储结构,邻接表(同时也介绍了逆邻接表,邻接多重表和十字链表)和邻接矩阵,在图的遍历这一块,我们学习了深度优先搜索和广度优先搜索,了解了图的最小生成树的问题,最短路径的问题。

二总结和分析个人对于各知识点的掌握情况

通过上面对各知识点的总结,以下就对全部知识点的掌握情况,做出总结:对于第一章,我能知道数据和数据结构的基本概念,也知道了在研究数据结构中,大体上都从其逻辑结构、存储结构和数据的相关运算三个方面着手,同时也对上过的c语言知识有了进一步的复习。对于第二章,主要掌握了,顺序表的数据结构分析,能知道在顺序表的基本运算的算法,主要掌握了:

顺序表查找中简单顺序查找、二分查找和分块查找的算法思想,及相应的算法程序,能简单地分析这三种查找方式的时、空性能。同样对于,顺序表的排序中,对直接排序、希尔排序、冒泡排序、快速排序、直接选择排序能掌握它们的算法思想,能看懂它们的所对应的程序**,但在运用这些算法上还有些生疏,在字符处理方面,能了解串和顺序串的概念,及顺序串的相关简单运算的算法思想。对于第三章,能够掌握的是链表的基本概念,知晓单链表和循环链表的逻辑结构和存储结构,同时能掌握两种链表中的相关简单算法,如在链表中的插入和删除操作。

对于第四章,能知道堆栈的基本概念及性质,和栈的相关运算,了解顺序栈和链栈的基本概念及两者的基本运算、两者的性能分析,但在实际程序应用中还有待进一步的学习。对于第五章,同第四章一样,我们学习了另一种存储形式,即队列,在这一章中,了解了队列的基本概念、性质。知道了顺序队列,链队列的基本概念,及基本的算法。

对于第六章,在原有的矩阵概念上,又了解到对称矩阵,三角矩阵,对角矩阵,稀疏矩阵的存储结构,在稀疏矩阵中,掌握了三元组表和十字链表的基本概念和存储的具体形式。同时也了解了广义表的运算概念,及深度和层次的概念。在矩阵的应用方面,主要掌握了,对稀疏矩阵的转置问题,和稀疏矩阵的加法运算的问题。

作为重点知识点,及本课程的难点之一的第七章,我所掌握的有,二叉树的概念和基本性质,,了解到二叉树的存储结构和对应的算法,能掌握二叉树便利的算法思想和能看懂它所对应的程序**,同时对于线索二叉树能了解它的概念,和如何将二叉树线索化,及线索二叉树的查找算法。在对线索二叉树应用方面,所掌握的有,哈夫曼树的概念、构造过程、对应的算法;二叉排序树的概念、性质、存储结构,和在二叉排序树的基本运算,也知道如何建立一个二叉排序树,能将一个非二叉排序树,调整为平衡二叉排序树,了解二叉树下的堆和堆排序的概念,能够建立堆,并能将堆调整为大根堆、小根堆。对于第八章,掌握了树和森林的基本概念和性质,知道树和森林的遍历,及树的存储结构和对应的算法,同时能够掌握树、森林和二叉树之间的转化的算法思想,能够看懂转化过程的程序**。

由于第九章,没有作为重点章节学习,所以,掌握的内容相对来说就比较少,主要掌握了,散列结构的基本概念,和散列存储结构,即散列表的概念,能够计算散列地址的计算,同时也了解了在散列结构中如何解决冲突的方法。同第九章一样,第十章又是一个知识点比较多的章节,所以相对来说就较难掌握,在这一章中,主要了解到图的基本概念,在图的存储结构中主要掌握了邻接矩阵和链接表的存储形式及基本算法,知道了图的深度优先搜索和广度优先搜索遍历的概念,及图的生成树的问题,了解到创建最小生成树算法和最短路经的算法。

以上都为本人对于这门课程的知识点掌握的实际情况。

三、对于这门课的学习心得。

由于这学期的时间比较短,且知识点又相对比较多,所以在学习这门课时,觉得学的比较吃力,但整门课学下来,却又觉得自己获益匪浅。一方面,同过对这门课的学习。让我们把即将遗忘的c只是给唤回,同时,利用c和本门课的知识点能够引申出缜密的算法思想和正确的程序**解决一些实际生活中遇到的问题。

另一方面,由于本门课的一个特点,即程序**不是主要的重点,主要的重点就是强调解决问题的思路,或者说是实现实际问题的算法思想,怎么一步一步的将问题解决的思路。培养了我们对于遇到问题的处理上有了一个循序进近的思想方式,使得再复杂的问题都能分解为一些简单部分,从而很容易的得以解决。在对这门课的实验课的学习时,培养了我们对于错误**改正的能力。

总的来说,这门课的学习对我们以后的影响很大,除此之外,就是在学习本课时,必须要花费一定量的课外时间来消化课堂上老师所讲的知识点。

四、对这门课的建议。

个人觉得老师教的很好,能将每个知识点,用最简明的方式讲解,使得我们很容易的理解并掌握。我对本门课的建议就是:老师在讲课时的课堂气氛过于严肃,所以,作为学生的我们,在不知不觉间就会产生一种疲劳感,以上只是个人愚见。

数据结构与算法

本章知识要点 算法的基本概念 数据结构的定义 线性表的定义和存储 树 二叉树的定义和存储 查找与排序算法。算法 algorithm 是一组有穷的规则,规定了解决某一特定类型问题的一系列运算,是对解题方 与完整的描述。算法是解题的步骤,可以把算法定义成解一确定类问题的任意一种特殊的方法。在计算机科学中...

算法与数据结构

学院专业姓名学号。实验1 线性表的操作 12学时 问题描述 假设一个班级内有n个学生,定义一个学生类和一个班级类。学生类中包括学号 姓名 性别 年龄 专业等属性 班级类包括一个学生对象链表。定义如下 class student class myclass student stu head 链表表头指...

算法与数据结构

1 简述算法的概念及其五个重要特性。2 下图是用邻接表存储的图,请画出此图,写出其邻接矩阵以及从c点开始分别按广度优先搜索和深度优先搜索遍历该图的结果。给定一棵用二叉链表表示的二叉树,其根指针为root,编写求此二叉树叶结点个数的算法,要求先写出二叉链表的类型定义。2.编写简单选择排序的算法。1 用...