《图解数据结构 使用c++》学习心得

        我于2018-8-9至2018-8-25两周时间学习了数据结构这一本书部分内容,现将个人学习心得总结如下:

        首先是我学习方法和策略上的反思。

  • 我的导师提供的学习思路很好,但是我没有很好的执行(初次这样看书,积累经验),老师推荐实验楼练习+数据结构书的内容,以实验楼练习为基础看书,我个人直接从课本入手,整本书的内容或者说数据结构没有进行全部的熟悉,原因在于书中概念、练习较多,所需时间较长,例如链表这一章节,内容有单向链表,环形链表,双向链表及其相关应用,而单向链表中又分链表的建立,节点插入和节点删除,故全书只看到有一半,树的概念及以前,后面的内容再找时间再看。
  • 编程如同语言,重点在于使用,要独立编程,把书上的概念转化为自己的东西,学以致用

        其次是编程方面的总结。

  • 编程方面感觉有较大提升,独立编写100行以上代码(包含调试)由一开始的一天现一个小时左右即可完成
  • 练习较多时可复制自己的代码以提高速度
  • 自己的代码一定要和范例对比,才能知道自己的不足,不断改进,只是目前时间紧迫,这方面做得还远远不够

         最后是内容方面:

1明白了数据结构这门学科是研究抽象数据类型,研究算法以达到提高程序的执行效率,减少内存的目的

2初步学习了c++语言的使用,学习了面向对象设计的基本概念和操作,以斐波那契数列和汉诺塔问题为例学习和练习递归算法,明白了以执行时间和所占内存空间为标准的程序评估方法

3进一步熟练和理解了数组,能够使用数组熟练进行矩阵的运算和稀疏矩阵、上三角和下三角矩阵的表示

4理解了链表和线性表的概念,线性表是数据的有序排列,链表是线性表的一种,链表元素为逻辑上相连而物理上不相连,属于动态数据结构,链表常用动态分配内存;与之对应的是数组、字符串为例的顺序表,属于静态数据结构,顺序表属于静态内存分配。动态分配内存和静态分配内存区别有以下:

  • 动态分配内存,内存空间是灵活的,根据程序需求分配,节省空间;而静态内存分配,内存空间是固定的,即以最大可能需要分配一段连续的内从空间,内存太小可能不够,内存太大又会造成浪费
  • 动态内存分配是程序执行时完成的,静态内存分配是编译时完成的;因此执行效率链表比顺序表略慢
  • 动态内存分配,内存使用结束后需手动释放内存,否则可能会造成内存泄漏;静态分配内存,内存使用结束后自动释放,且不存在内存泄漏问题

5熟练掌握单向链表、环形链表、双向链表的概念和各种链表的建立、遍历、节点的插入和删除。能够使用链表进行多项式和稀疏矩阵的表示。

6巩固了堆栈和队列的概念,堆栈和队列都是相同数据类型数据的集合,堆栈和队列可以理解为一种特殊的优先队列,即优先规则:先入后出和先入先出。分别使用链表和数组进行堆栈和队列的操作,一般来讲,链表算法比顺序表算法复杂。学习了利用堆栈法和括号法进行算数表达式的前序、中序、后序的表示和前序、中序以及后序之间的转换以及各种表示方法的求值。学习了环形队列、双向队列和优先队列的概念

7学习了树状结构。树是一种分层的非线性结构,学习了度数、层数等基本概念,其中二叉树每个节点的度数小于等于2。二叉查找树每个树根的值大于左子树的值,小于右子树的值,熟练使用数组和链表建立二叉查找树,学习了二叉树前、中、后序遍历,节点的插入和删除,进行二叉运算树和数学表达式的转化和计算,如何将二叉树转化为线索二叉树,树、森林分别于和二叉树的相互转换以及树和森林的遍历,根据二叉树前序和中序,中序和后序确定唯一二叉树,了解了优化二叉查找树,平衡树,决策树,B树,二叉空间分割树,四叉树、八叉树等的概念

 

你可能感兴趣的:(《图解数据结构 使用c++》学习心得)