数据结构第五章小结

1.本章小结:

树这种数据结构从逻辑存储上理解是一种全新的数据结构,基本的常用操作大概是查询,猜测应用场景应该是一些数据内容的分类管理吧,按照规定的特征规律进行存放可以便于快速地查找及得到该数据的类别特征。但是从物理存储上理解其实还是顺序存储和链式存储的方式,但是打包在结构体里的结构体成员会不一样,以及能把顺序表和链表结合使用,譬如:二叉树的带孩子的双亲表示法。不得不感叹,指针可真是个好东西,但是还是要谨慎使用,如果在销毁回收空间的时候,特别是链式存储结构的数据,不小心没有将指针当前所指向的空间释放就将指针指向了另一个存储空间,而那段没有被释放的空间就永远占用在存储空间中且无法找到释放。所以还是一个风险系数比较高的,操作,所以一般使用指针的时候要初始化为空指针。

希望还能查找一些资料了解更多关于树这种数据结构的应用场景和操作吧,因为根据目前做过的应用代码题去理解,还是觉得这样的数据结构在现实生活使用比较抽象,以及对哈夫曼树的算法使用比较生疏,要充分理解哈夫曼树提出的目的,是为了解决什么场景的问题,弥补了哪些其他类型树的缺点等,还有待去深入了解。

 

 

2.在课堂微信群提问的时候其实对一些性质的计算还有概念的部分理解还有一点点懵,以及在周二课的那个对一个数组起别名的问题,

typedef TElemType SqBiTree[MAXTSIZE];

定义了一个新类型,类型名为 SqBiTree,本质是一个数组,数组元素类型是 TElemType,长度为 MAXTSIZE

 

 类似于:

int a[100];

int b[100];

int array[100];

typedef int arry[1000];

array t;//t指向结构名为array的数组的首地址,相当于定义了一个名为t的array类型数组

//个人认为因为数组其实就是一个指向首地址的指针且后开辟了一连续的存储空间,只要得到了首地址就能对数组单元进行相关操作。(如理解有误希望老师能指出相应错误)

然后是在作业题和实践题中,看着老师的“带你打代码”的视频一步步跟着理解代码逻辑会相对容易,

作业题的一些小题其实要对概念理解得清楚才能准确得出答案,所以有时候还是要较真一点

代码题是对递归使用去遍历树,要把握整个递归遍历的过程,以及实践第一题很多处其实是左右子树的判断,很多代码是重复的,所以在复制的时候要注意细节的问题,lchild和rchild在复制之后要查看是否对应位置都改过来。

3.关于第五章学习的博客内容:

两个是分别在博客园和csdn看到的对几种数据结构分成章节归类总结得比较清晰的博客,并附有代码实现:

https://www.cnblogs.com/songwenjie/p/8878851.html#%E6%A0%91%E7%9A%84%E5%AE%9A%E4%B9%89

https://blog.csdn.net/csdn_aiyang/article/details/84977814

还有是动态数组的STL使用:

https://blog.csdn.net/Richard__Ting/article/details/79490665

还有一个是对二叉树的插入、删除、查询、遍历,应该是参考了文献的代码,后期会查看一下文献的具体代码实现:

https://blog.csdn.net/u014182411/article/details/69831492

 4.第5章学习的树大概是为第六章的树先做一个大概的了解,且图的结构和树有一定的相似之处,但不再局限于不能有相交这个限制,由一个易懂的“六度空间理论”引入,去理解图在逻辑存储上的意义。其实经过第五章的学习,可以感觉到,不同的数据结构其实可以配套使用的,就像在上面说的带孩子的双亲结点定义,就是每一个结点带一个指向链表头结点的指针,又定义顺序表的结构体,每一个数组单元对应相应的结点。而且在,C++面向对象程序设计的课程和在第五章的实践题都能体会到,就是一个数据结构可以在函数调用的时候充当辅助结构,去解决对应辅助结构的特殊操作,就会比直接对主函数中定义的数据结构进行操作更灵活。希望能接触到更多相关的应用场景和会去找一些文献案例的代码了解一些具体实现吧,还要倒回去查看之前知识点的概念小题和代码思路,以后要认真注意题目的特点。

 

 

 

 

 

翻译 朗读 复制 正在查询,请稍候…… 重试 朗读 复制 复制 朗读 复制 via 谷歌翻译(国内)

翻译 朗读 复制 正在查询,请稍候…… 重试 朗读 复制 复制 朗读 复制 via 谷歌翻译(国内)

posted @ 2020-05-21 22:33  1905梁秋璇  阅读(200)  评论(0编辑  收藏  举报