欢迎光临散文网 会员登陆 & 注册

数据结构学习心得

2021-02-17 11:11 作者:阿-岳同学  | 我要投稿

在2021这个寒假,由于想要把编程能力打扎实,我自学了数据结构与算法,其实学的不够细致,基本上只过了一遍,在代码实战方面目前只做了个链表和一个无向图的深度优先遍历,深度优先遍历这个目前还做的不够好。

在没有学习数据结构与算法之前,我们的专业在大一的时候开始学习了C语言,当时的期末作业是要我们写一个学生信息管理系统,也就是一个存放学生结构体的一个数据集合,然后能够实现增删改查功能,我依稀记得当时理解指针还是有点费力的事情,记得当时期末作业一做做了两天。记得做完后还挺有成就感,还录的解说视频还录了足足半小时。

现在在学完数据结构的时候再回看我当时设计的C程序,感觉缺点一下子就出来了,首先代码比较冗余,包含相同功能的代码都明显重复了,当然这是我的API的设计不够好。其次,整个学生数据集合的结构设计的也不够好,当时可以说用链表来做,但是由于当时指针学习的并不深入,所以就只用结构体数组来做了。直接使用数组来作为学生数据库的缺点很明显了:一是容量固定,不能够动态扩充容量,二是增加和删除学生会比较麻烦。主要是第二点让我看了感觉十分尴尬,因为当时我的增添学生的做法是插空法,删除学生的做法也就是直接删除,数组按下标查找快的优势形同虚设,学完数据结构的线性表之后我才知道原来对于静态的数组来说,每一次增添或者删除学生都需要重新创建一个新的数组,然后把以前的数组里的内容按顺序放到新数组里。同时相应的容量数字也会发生变化。这看起来性能开销一下子就变大了起来,于是便有了链表,它是由指针串起来的一个结构,由于它这灵活的特性,解决了数组增删麻烦的问题。但是链表也有它的缺点,就是访问一个元素不能够直接通过一个下标来访问其元素,只能老老实实从头顺着链表遍历了。

在我理解了线性表中的数组和链表之后,我还看到了很多其他有意思的线性表结构,有:静态链表、循环链表,双向链表,双向循环链表……不同的场合有着不同的应用。

数据结构当然不止有线性表的结构,还有更有意思的栈、队列、树、图等结构。

对于栈来说我感觉它应用非常广泛,一说到栈,第一个想到的就是“栈内存溢出”,因为Java里就有一个内存区域叫栈内存,在写递归调用的时候就容易出现这个bug。栈遵循先进后出的规则。与栈相似但又不一样的一个结构是队列,它也有栈的一系列功能,但是它遵循的规则是先进先出。逆波兰表达式就是可以用栈来实现,它主要用于计算解析一个数学表达式,我个人猜测栈结构会广泛应用在编译器解析代码里。队列结构也十分基础实用,一些算法就可以基于这个结构来实现,比如广度优先算法。

接下来还学了树结构,树这一章里内容很丰富,就树的类型就有很多种,还有树的遍历方式,以及树和二叉树的转换。

最后就是图,学到图的时候开始感觉难度上来了,尤其是图的遍历问题,以及最短路径,拓扑排序,这些问题……

有很多问题我没有深入理解,仔细研究,这次自学数据结构只是一个开始,也只是第一遍学习,在以后我还会逐渐扎实基础,丰富知识,进行实战练习。


数据结构学习心得的评论 (共 条)

分享到微博请遵守国家法律