一、常用的三种数据结构
包括线性结构、树、图。
(1)线性结构又包括数组、链表,以及由他们衍生出来的栈、队列、哈希表等。
(2)树结构的典型代表是二叉树,以及衍生品二叉堆等。
(3)相对来说最复杂的数据结构,存在多对多的关联关系。
二、算法复杂性相关概念
(1)算法时间复杂度,表征的是基本操作执行次数。
(2)算法空间复杂度,算法在执行过程中所临时占用的存储空间的大小。
时间复杂度和空间复杂度都用大O表示法。也就是用简化的同数量级函数来表示。
注意:递归是用栈进行数据吞吐的,它所需要的内存空间与递归深度成正比,如果递归的深度是n,空间复杂度就是O(n)。通常情况下能用循环的要尽量避免用递归,其中道理以后再探究。
三、数组
(1)数组在内存中顺序存储。
(2)数组的操作有增、删、改、查四种情况。
(3)查:根据下标进行读取,时间复杂度为O(1)
(4)改:根据下标进行修改,时间复杂度为O(1)
(5)增:也就是插入操作,有尾部插入、中间插入和超范围插入。尾部插入直接放在数组尾部的空闲位置即可,等同于数组的改。中间插入,要先把插入位置及后面的元素向后移动,再把插入的元素放到对应的位置上。超范围插入,要先把数组扩容,书中讲到的是直接创建一个是旧数组长度两倍的新数组,再把原来的数组元组复制过去,再进行插入操作即可。由于需要数组扩容和移动元素,所以增的时间复杂度是O(n)
(6)删:把被删除元素后面的元素都向前挪一位。时间复杂度O(n)。如果不考虑数组的顺序,实际上可以把数组最后一位元素复制到被删除的元素的位置上,然后删除最后一个元素,这样做的时间复杂度是O(1).
(7)数组的优势和劣势:数组读的时间复杂度低,而改(包括增、删)的复杂度