数据结构以及相关排序

哈希表(Hash Table)

  • 所有符合键值对即key-value的结构就是哈希。数组其实也是一种哈希。
  • 计数排序(复杂度(n+max))无法统计负数和小数,需要一个hash表,其桶排序的极限比快排(复杂度NLogN)还快。
  • 数组的长度(length)不是指数组的个数,而是index最大值+1。如index=66,则length=67。

桶排序与计数排序的区别:

桶排序中一个桶可以放一个范围内的多个数据,在各个桶中又可以用其他方法排序,其快速之处在于只用对比同一个桶内的数字而无需与其他桶的数字作对比。与计数排序相比,桶排序需要作二次对比,但可省略桶的个数。

基数排序与计数排序的区别:

基数排序是从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。其最大的好处是可以用最多十个桶来排序非常大的数字而无需浪费大量的桶,但是要作多次对比。


队列(Queue)

队列的特点是先进先出(push-shift),可以用数组实现
举例:排队

栈(Stack)

栈的特点是先进后出(push-pop),也可以用数组实现
举例:盗梦空间


链表(Linked List)

  • 数组无法直接删除中间的一项,链表可以
  • 用哈希(JS里面用对象表示哈希)实现链表,哈希里面指向了哈希
  • head:第一个哈希对象,即链表的表头,找到表头便可找到后面的所有项。
  • node:节点,表头也是节点。

链表与数组相比存在的优缺点:

链表与数组相比,其优点是可随意删除任何一项,而其缺点是很难取到链表的第n项。即数组查询很快,链表删除很快。


树(tree)

举例:层级结构、DOM

数据结构以及相关排序

如上图所示:层数,从0开始,共两层;深度即一共有多少层,上图深度为3;节点:每一个哈希就是一个节点,上图节点个数为9:其中没有子节点的节点称为叶子节点。

  • 二叉树(Binary tree):每个节点最多只可分两个分支。

数据结构以及相关排序

  • 满二叉树(Full Binary tree):一棵深度为k,且有2^k-1个节点的二叉树,称为满二叉树。
  • 完全二叉树(Complete Binary tree):一棵二叉树中,除最后一层外,若其余层都是满的,并且UI后一层或者是满的,或者是在右边缺少连续若干节点。
  • 完全二叉树和满二叉树可以用数组实现,其他树可以用哈希(对象)实现。

相关推荐