2016级数据结构结课总结

在贺老师的带领下,经过半学年的学习我们2016级部6专业完成了数据结构的学习。

众所周知数据结构是计算机专业的经典专业课,有个公式说得好:程序=数据结构+算法。我觉得好的算法是必要的但是合适的数据结构更是重中之重,所以在上这门课之前贺老师就给我们强调了它的重要性,这很重要。这半年不管从知识、学习习惯、行为养成等方面,我都收到了极大的正面影响。

回顾数据结构的整个课程,每种数据结构各不相同,但是在学习路径上却可以类比一下的,老师给我们展示过一个图片(以下)



我在学习数据结构的时候也是利用了这张图,可以说是贯穿每一种数据结构类型,它是起主导方向作用的。我就借着这张图对我们半个学期学的数据结构类型做一个大体总结。

数据结构经典的数据结构有:顺序表、栈、队列、串、数组、树结构、图结构......这些数据结构根据其不同的特点应用在不同的场合,但是他们大致分为两大类:一类是线性结构(在逻辑上线性排列),第二类是非线性排列(可以有分枝,回环)。接下来是他们的存储方式,存储方式的不同也适用于不同的场合:在空间开销比较大的情况下,可以采用动态开辟内存空间的链式结构存储数据结构,而在查询操作较为多的地方可采用顺序结构,直接返回下表的方式来达到目的。总之不同的存储结构适应不同的开发需求。

确定了存储方式之后,接下来的操作便是对该数据结构进行算法库的建立了,其中经典的算法有:插入运算、删除运算、修改运算、查找运算、排序运算......他们就像是每个数据建立后自动需要完成的工作一样,基本上算法库都是要涵盖的。

以上是队数据结构的大体概括,接下来我想分享一下我学完整节数据结构的收获。

一、逻辑结构为线性的数据结构

1.线性表:线性表分为顺序表和链表,他们也分别代表了两种储存结构。其中顺序表是一种可以直接用下表进行查找输出的方式,它适用于查看比较多的操作,但是占用的空间是连续的很可能造成空间的浪费,不易于删除。相对来看链表的存储结构对空间开销来讲更为和谐,它采用的是随机开辟内存的方式,并且对于增删操作来说是非常方便用,但是在查找方便显得就有些迟钝。所以同作为顺序表的它们更像是黑白颜色,互相弥补,使用于不同的环境。

2.栈与队列:

      i.栈:栈是一种采用先进后出的方式存储数据的数据结构,一般在一些特殊情况下使用,例如乒乓球球桶等一系列特殊问题。采用的方式一般是链式存储,可以相对灵活的完成一些功能。

  ii.队列:队列测试采用先进先出的方式存储数据的数据结构,也是使用在一些特殊情况下。

栈与队列也是很互补的一对数据结构,所以在此验证了不同情况下应该采用不同数据结构的说法。

3.数组与.串:

i.串:字符串也就是串,可以看做一种特殊的顺序表,特殊在它的数据总是字符型,而且可以采用不同的字符结构体。

ii.数组:数组相比大家都不陌生它随着串应运而生,从穿的结构体定义中做文章便可生成数组。

这么看来,数组与串也是一对欢喜冤家,适用于不同的相对环境。

二、逻辑结构为非线性的数据结构

1.树结构:树结构是一种定义为每个节点包含有同类型的子节点的的数据类型,它的用途广发,孩子节点可以是与他有密切关系的节点,也可以是它在人类逻辑上下属节点,总是树结构的建立是我们程序设计路上必不可少的一环。前有哈夫曼数及其哈弗曼编码,后又二叉树,二叉搜索树B数,红黑树,这些在当代程序里大量而广泛的使用,乃是重中之重。

2.图结构:图结构是众多节点根据他们相互之间的不同关系建立起来的类似于人类关系网络的数据结构,它的应用程度不逊于树结构,并且在当前大热的AI人工智能、大数据、深度学习、机器学习中占到了数据存储的大部分江山。


以上是我全面回顾了一下我们所学的要点知识。属于Objective客观的陈述事实,而学完之后一些Reflective思考反应还是很有必要的。

     

在学习了众多数据结构之后,我不由自主的对一个问题的看法产生了质的改变。从原来拿过题就开始动手做,到现在先分析本质进而考虑数据结构,最后考虑设计算法,这是我程序员之路上的一大步,让我脱离的初级菜鸟程序员的影子逐渐进化成一个高级菜鸟程序员,哈哈!言归正传,我们对于数据结构的探索不能只停留在书本上,因为程序设计的世界里是没有标准模板的,在浏览了较多的数据结构后,最终的目的是让我们学会自己根据不同的需要造数据结构来完成我们的需求。这也是我一直在努力的方向。


我还想Interpertive一下我半学年的成绩:首先是基本的结构已经熟练掌握,对哈夫曼数等一系列基本的二叉树已经掌握,但是对于BST二叉搜索树,及其衍生的B树,红黑树还有待掌握,虽然老师没讲,但我认为比那些基础的更加重要。


近几年贺老师对于程序设计课程交教学方式进行了大大的改变。但是说句实话,相比于一般课堂来讲,我们的课堂缺少了紧张感,而且老师上课带我们回顾的课程也是视频上就已经掌握的,对于我来讲 重复并没有多大意义。不知道老师是否能看到我的这篇文章,我作为一个90后是很愿意接受改变的,当然对更高效更直观的课堂体验也是所有老师的追求,所以我想只是稍微的提点建议,希望老师更加注重代码的累积,毕竟作为程序员来讲,show the code 是最重要的而不是show some graphs。


最后的Decisional是希望能在大二寒假完成对数据结构的全部掌握,还有一些基本算法的掌握,争取写一手漂亮的代码。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值