数据结构与算法_开篇

我决定了,每天的写作内容就是今天学到了什么。

 

很无趣是不是?

因为我终于意识到知识的掌握很大程度上依赖于“是否记住了它”。简单来说就是记忆。或者说这种简单的事情我现在还没有做到,所以我决定每天记录一下。

 

你好,欢迎你。

这里是组蒽,很高兴能和你分享我的成长

记录和分享是我写作的初衷

就这么简单,干就行了

Just Enjoy Ourselves!

 

以上是公众号的简介,名字就叫组蒽。

 

算法与数据结构的课程这周一共学习了10小节,内容有:时间复杂度、空间复杂度、数组、链表、栈、队列。具体的概念我已经忘得差不多了,就大概写写现在的我还记得的。

 

首先是时间复杂度,简单来说就是“运行次数与输入数据量有关的”代码的执行次数的数量级。这里有一个概念应当注意,那就是均摊时间复杂度。顾名思义,就是将时间复杂度均摊。如果一段代码的时间复杂度呈周期性变化,比如以8(次)为一个周期,前7次的复杂度都为O(1),而第8次为O(n)(是不是有点像单位冲激序列?),那么我们还是认为这段代码的时间复杂度为O(1),第8次的复杂度就被前几次平摊了。

 

空间复杂度是什么我有点模糊,好像是说内存空间的概念。如果代码“申请的内存与输入的数据量有关”,输入的数据量越大,申请的内存也就越大,那么就认为这段代码的空间复杂度较高。

 

数组是一段连续的内存空间,而链表是发散的内存空间。使用链表储存会消耗较多的内存空间,因为要储存下一个节点的内存地址。数组的特点是查询快,增删慢,因为查询可以直接通过下标找到地址,从中间删除时需要将该点以后的对象全部向前挪一位(话说python中的列表在增删数据的时候会自动移动剩下的数据,底层应该是实现好的,然而在C语言中手动管理内存的确挺麻烦的)。链表的特点与之相反,增删快,查询慢,因为链表的查询只能从头开始依次查询,增删时只要修改下一个节点的指向的地址就行了。数组与链表还有一些变种。(那么具体都有那些变种?)

 

栈和队列是两种数据管理方式,其底层可以用数组也可以用链表实现。队列中的数据遵循先进先出的原则,而栈是先进后出。似乎也有一些变形。(又来了)

 

最后还学习了递归。这一段是我后来加上的,因为第一次写的时候我给忘了,这一节课我是分段学的,效果很差。

这10节课所展示的实例代码我都没有直接写过,具体的代码实现我将在下次的文稿中展示,

文章中忘记的知识也会补上。

 

最后谢谢你肯读到这里,这对我来说是莫大的鼓舞,这里是新人写手,请多关照!

 

 

你可能感兴趣的:(java)