“怎样给一个磁盘文件排序?”
这是《编程珠玑》 第一章开篇的一个提问。第一眼看到这个问题,脑海里是不是出现了各种冒泡排序、归并排序、快速排序算法,准备“大展身手”一番?然而正如作者接下来说的一样,这样做往往导致一上来就犯错误,错就错在马上回答了这个问题。
这是《编程珠玑》 第一章开篇的一个提问。第一眼看到这个问题,脑海里是不是出现了各种冒泡排序、归并排序、快速排序算法,准备“大展身手”一番?然而正如作者接下来说的一样,这样做往往导致一上来就犯错误,错就错在马上回答了这个问题。
我们知道,链表是一种线性递归的数据结构。前一个结点指向后一个结点,线性地链接起来。树跟链表类似,只不过树的结点与结点之间,不再是单个线性地链接,而是一个结点可以指向多个其他结点。
有时候我们需要搜索信息,例如,在数组中找出某个元素,或者找出某个集中是否有某个对象。我们把寻找目标信息的过程,叫做查找。
有时候我们会收集一些元素,然后处理当前键值最大的元素。然后再收集更多,再处理。例如,在手机来电、短信、游戏三个程序中,来电的优先级是最高的,我们总希望先处理来电请求。
归并排序和快速排序都是时间复杂度为 O(nlogn)
的排序算法。
背包、队列和栈是三种简单的数据类型。那么我们如何去组织上述的数据类型呢?这时候就要用到 数组 和 链表 了。
在开始谈数据结构之前,先聊一聊什么是数据抽象
和抽象数据类型(ADT)
。