前言
因为在自考中接触了数据结构这一块知识,经过自己看书,小组讨论讲课的方式学习,所以对于这一块知识学起来还是挺轻松了。这一段视频也是对数据结构这一块知识的补充,对于数据结构这一块知识有了进一步的理解和掌握,一些自己不太理解的地方,视频里知识的补充和习题的演练、讲解,基本上也都能弄清一二。
再学数据结构
数据结构是计算机存储、组织数据的方式,为了能够让计算机的资源能够得到高效的利用,提高计算机运行的效率。所以它不能避免的涉及到存储、逻辑和算法这些东西。
从图中可以看出,现在我对于数据结构的理解是,数据的逻辑结构为数据的存储结构打下了基础,使得数据的存储有了一个思想,一个蓝本,存储结构就是蓝本的实施,算法就是对数据的存储结构进行优化。这三者的思想宗旨是统一的,也就是为了提高计算机资源的利用效率和运行效率。
逻辑结构
逻辑结构分为集合、线性结构(也就是线性表),而线性表又分为一维数组、队列和栈,非线性结构分为树、图和多维数组。
集合
对于集合这一概念,在上初中的第一节数学课上,我们就学过了,而我们计算机的集合概念,和数学课上的集合也是有很多相似的东西,多了一点就是计算机中的集合是一种数据结构,数据的组织方式,可是它也不像其它逻辑结构一样有逻辑关系,集合石没有逻辑关系的。如果您想更多的了解集合,请看这一篇文章:《数据结构学习之集合》,对于集合,个人觉得讲得还是很好的。
线性结构
线性结构我们还是很熟悉的,线性结构也就是线性表。在软考视频里讲到线性结构包括了一维数组、队列和栈。
非线性存储结构
非线性结构这一块内容还是很重要的,包括了树、图和多维数组。
树
树这一块知识首先要了解一些基本概念:
1、结点的度:与下一层的几个结点相关联就是度;
2、树的度:最大结点的度;
3、叶子结点:下一层没有结点;
4、分支节点:除了叶子结点其它都是分支结点;
5、内部结点:除了根结点和叶子结点其它都是内部节点;
6、父结点:下一层的上一层结点;
7、兄弟结点:同一个父结点;
8、层次:树有多少层;
二叉树
树中最重要的知识点莫过于二叉树这一块了。二叉树有几个很重要的重要特性
1、在二叉树的第i层上最多有2^i-1个结点(i>=1);
2、深度为K的二叉树最多有2^k -1个结点(k>=1);
3、对任何一颗二叉树,如果其叶子结点树为n0,度为2的结点数为n2,则n0=n2+1;
二叉树还有一些特性就不一一列举了,二叉树中还涉及到最优二叉树(哈夫曼树)、线索二叉树。
图
图这一块知识算是比较难的,但是静下心来也是可以理解得了的。图也是有边有顶点,图也就是由边和顶点构成的。视频里图的这一块知识讲得没有自考书上的全面,但却是很深入。主要理解图的概念、图的遍历、拓扑排序和关键路径。图的遍历有深度和广度优先,一个纵向,一个横向。拓扑排序其实也就是一个去掉入度的一个过程。关键路径这里讲得倒是很深入,和运筹学里的一块知识很像,涉及到最迟最早这些问题。
存储结构
在软考视频里讲的存储结构主要是哈希表,哈希表也是散列表或杂凑表。哈希表主要的内容就是Hash函数的几种构造方法。
1、直接定址法:取关键字或关键字的某个线性函数数值为哈希地址。
2、除余法:以关键字以表元素总数后得到的余数为存储地址。
3、 基数转换法:讲关键码看作是某个基数制上的整数,然后将其转换为另一基数制上的数。
4、平方取中法:先通过求关键字的平方值扩大相近数的差别,然后根据表长度取中间的几位数作为散列函数值。又因为一个乘积的中间几位数和乘数的中间几位数和乘数的每一位相关,所以由此产生的散列地址较为均匀。
5、位移法:将关键码分为多段,左边的段右移,右边的段左移,然后将它们叠加。
6、机数法:选择一个随机函数,取关键码的随机函数值。
7、拉链法:将散列表的每个结点增加一个指针字段,用于链接同义词的子表,链表中的结点都是同义词。
算法
排序
排序算法有内部排序和外部排序,自考课本和视频里都只介绍内部排序,内部排序有插入排序、选择排序(简单选择排序、堆排序)、交换排序(冒泡排序、快速排序)、交换排序(冒泡排序、快速排序)、归并排序、基数排序和插入排序和希尔排序。
查找
查找分为顺序查找、二分查找和分开查找。
总结
经过软考视频的学习,再一次学习了数据结构,之前学不透的知识,感觉理解了很多。知识还真的是得多重复,相信经过下一个阶段的学习,我会把这一块知识理解得更透,掌握得更好。