12 2016 档案
摘要:在前面几篇博文中曾经提到链表(list)、队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现。 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据时,优先使用数组。数组可以通过下标直接访问(即随机访问),正是由于这个优点,数组无法动态添加或删除其
阅读全文
摘要:二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙。其衍生出各种算法,以致于占据了数据结构的半壁江山。STL中大名顶顶的关联容器——集合(set)、映射(map)便是使用二叉树实现。由于篇幅有限,此处仅作一般介绍(如果想要完全了解二叉树以及其衍生出的各种算法,恐怕要写8~10篇)
阅读全文
摘要:顾名思义,快速排序(quick sort)速度十分快,时间复杂度为O(nlogn)。虽然从此角度讲,也有很多排序算法如归并排序、堆排序甚至希尔排序等,都能达到如此快速,但是快速排序使用更加广泛,以至于STL中默认排序方法就是快速排序。此外,快速排序的思想——划分(Partition)思想给人很多启发
阅读全文
摘要:堆(heap),是一种特殊的数据结构。之所以特殊,因为堆的形象化是一个棵完全二叉树,并且满足任意节点始终不大于(或者不小于)左右子节点(有别于二叉搜索树Binary Search Tree)。其中,前者称为小顶堆(最小堆,堆顶为最小值),后者为大顶堆(最大堆,堆顶为最大值)。然而更加特殊的是,通常使
阅读全文