数据结构清单
Binomial Heap
Leftist Tree:左倾堆
重型网络教程
1.纸上谈兵:算法与数据结构
2.CS 598 JGE:Advanced Data Structures(Fall 2015)
3.COP 5536 Advanced Data Structures(Florida)
4.wikibooks Data Structures
5.Geeksforgeeks(very much)
6.COMP 5408:Advanced Data Struestures
7.Stackoverflow
书籍推荐
Algorithms in C (Computer Science Series)
(2人评价)
作者: Robert Sedgewick
出版社: Addison-Wesley Professional
出版年: 1990-01-11
评语:非常耐心的讲解一些常见的算法,很容易入门。这本书涉猎面较广,除了经典的算法,还有比如数值计算、信号处理、字符串处理、并行运算算法的介绍。
Data Structures and Algorithm Analysis in C (2nd Edition)
8.8 (61人评价)
作者: Mark Allen Weiss
出版社: Addison Wesley
出版年: 1996-09-19
评语:介绍算法和数据结构,讲解很深入。但有些部分的讲解有些过于概括,不容易理解。
The Design and Anaylsis of Computer Algorithms
作者: Alfred V. Aho / John E. Hopcroft / Jeffrey D. Ullman
出版社: Addison-Wesley
出版年: 1974-1-11
页数: 470
定价: USD 71.60
装帧: Paperback
ISBN: 978020100029
Algorithms on Strings, Trees, and Sequences
作者:Dan Gusfield
高级数据结构
1.MIT的高级数据结构教程
这门课包含各种让本屌世界观崩坏的奇诡数据结构和算法,它们包括但不限于:
-
带"记忆"的数据结构(Data Structure with Persistence)。
-
van Emde Boas(逆天的插入,删除,前驱和后继时间复杂度)。
-
o(1)时间复杂度的的LCA、RMQ和LA解法。
-
奇幻的o(n)时间复杂度的Suffix Tree构建方法。
-
o(lglgn)的BST。
-
...
总之高潮迭起,分分高能,唯一的不足就是没有把它们实现一圈
2. 林厚从主编的《高级数据结构》
林厚从主编的《高级数据结构》在基本数据结构的基础上,围绕一些常用的高级数据结构,结合大量实战例题,深入分析"数据结构是如何服务于算法的"。本书主要内容包括:哈希表、树与二叉树、优先队列与堆、并查集、线段树、树状数组、伸展树、Treap、AVL树、红—黑树、SBT、块状链表与块状树、后缀树与后缀数组、树链剖分与动态树等。
3. Advanced Data Structures in C++
Advanced Data Structures in C++; $10.00; 826 pages; 2006, 2014; Vic Broquard; Broquard eBooks; ISBN: 978-0-9705697-7-6 3rd Edition
Link: http://www.broquard-ebooks.com/advanced-data-structures-in-cpp/
Chapter 1 — A Review of Classes
Chapter 2 — Advanced Features of Classes
Chapter 3 — Operator Overloading
Chapter 4 — Inheritance
Chapter 5 — Abstract Base Classes
Chapter 6 — C++ Error Handling
Chapter 7 — A Review of the Basic Container Classes
Chapter 8 — Templates
Chapter 9 — Binary Files and Hashing Techniques
Chapter 10 — Trees
Chapter 11 — Sorting Algorithms
Chapter 12 — B-trees and AVL Trees
Chapter 13 — Heaps, Priority Queues, and Graphs
Chapter 14 — Of Sets and Maps
Chapter 15 — An Introduction to the STL — Standard Template Library
Chapter 16 — Complex Analysis
4.CSDN上有不少"高级数据结构"的资源
知乎数据结构
-
如何学习数据结构
链接:https://www.zhihu.com/question/21318658
资源论
1.读书橙书: 《算法 第四版》
亚马逊中文版: amazon.cn 的页面
线上资源: Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne
配套的习题答案:
jimmysuncpt/Algorithms
aistrate/AlgorithmsSedgewick · GitHub
http://algs4.cs.princeton.edu/code/
Programming Assignments
2.Coursera课程:
Part 1: https://www.coursera.org/course/algs4partI
Part 2: https://class.coursera.org/algs4partII-006
3.斯坦福的算法公开课
Part 1: https://www.coursera.org/course/algo
Part 2: https://www.coursera.org/course/algo2
4.普林斯顿的算法课程
Coursera - Free Online Courses From Top Universities
Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne
5.算法可视化
http://visualgo.net
http://zh.visualgo.net/zh/
6.在线视频客课堂:网易云课堂,慕课
★★★★★浙江大学的:数据结构 - 网易云课堂
★★★★★清华大学的:数据结构-学堂在线慕课(MOOC)平台
7.数据结构-C语言
《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明
附带数据结构清单
方法实践论
-
数据结构的前期学习要重理解。以倒推的方式,搞清楚每种数据结构产生的目标。多画画图,思考一下,理解透彻以后。再去做练习题会事半功倍。
-
把线性表、链表、树、图、各种排序算法,熟悉一遍,熟悉需要达到的结果是提到一种结构,脑海立马可以反映出其中元素的组织方式,插入删除操作的步骤。
-
把所有的(大部分)的算法和数据结构写一遍。这是一个做合格程序员的基础;
-
把《STL源码剖析》看看。会对设计实现有一些新的认识。
-
参考STL的实现,抛去内存管理和迭代器的部分只看实现的话还是很容易从中学到东西的。 从vector、list到 hashtable 到红黑树等都有;
-
强啃linux内核剖析(同时在参考30天自制操作系统和thu的ucore os的7个实验),看到里面的源码,更加进一部的理解了数据结构,操作系统;
-
把所有经典算法写一遍:二分查找,几种经典排序如冒泡,快排,归并排序,并弄清楚他们的差别;top-k,二叉树,二叉树查找,平衡树,B树系列,大小根堆,最好知道各自的应用场景加深理解;
-
看算法源码:看一些开源系统里面应用算法知识的源码,比如缓存系统里面的双向链表+hash实现;数据库系统里面的B+树的使用实现过程;
-
刷题:<剑指Offer>,<编程之美>,<结构之法:面试和算法心得>,LeetCodeOnlineJudge,九度OnlineJudge,用代码记录你的成长之路,冉文杰算法问题选编, LintCode - 编程面试题在线训练平, LeetCode / LintCode 答案查询
-
不要总折腾数据结构、发明数据结构,理解不同应用场景的特点,远比一味地看算法、数据结构来的实在, 机械硬盘为什么索引文件系统常常采用B+树?因为机械硬盘顺序读取快、随机读取慢的问题,B+树就是专门针对机械硬盘这个工作特点提出的;
-
开窍方法之一:学习LISP
-
去杭电,pku之类的oj上刷刷题目
-
The Science of Programming, 证明简单代码段的正确性是一个很神奇的技能——因为面试时大多数公司都会要求在纸上写一段代码,然后面试官检查这段代码,如果你能够自己证明自己写的代码是正确的,面试官还能挑剔什么呢?
-
进阶版:《STL源码剖析》
学习数据结构/算法要经历3个阶段:
理解数据结构/算法的原理
也就是说能够在脑子里明白这个数据结构/算法是怎样工作的,知道这样做的正确性。当然,如果理解有困难可以借助其他知友们推荐的可视化工具:VisuAlgo - 数据结构和算法动态可视化 (Chinese)
用C/C++实现
这一步也是最考验一个人编程基本功的。写出简洁、优雅、具有表现力的代码能够使数据结构的学习变得很简单。反之,如果接口设计得太复杂、边界情况不注意处理或者不注意效率的话,就会出现各种bug:内存泄漏、野指针、递归栈溢出……
因此,建议学习的时候多参考优秀的教材。我用的是邓俊辉大大的数据结构C++版(这里安利一下学堂在线上的配套MOOC数据结构(2015秋)-学堂在线慕课(MOOC)平台)和Weiss的数据结构与算法分析。这两本书的主页上都提供了源代码下载。
分析时间和空间复杂度、优点、缺点以及适用于解决的问题
2.如何将数据结构和算法应用到实际之中
链接: https://www.zhihu.com/question/20066988
3.Coursera(或其他慕课平台)上有哪些算法数据结构相关的课程值得推荐
链接: https://www.zhihu.com/question/49606500
4.学习算法与数据结构,有什么比较好的mooc推荐么,还有比较好的书籍推荐?
链接: https://www.zhihu.com/question/34605825
5.有哪些类似带花树的冷门算法或数据结构?
链接: https://www.zhihu.com/question/40028742
6.有哪些算法或数据结构是ACM大牛们在比赛中创造出来的?
链接: https://www.zhihu.com/question/26547156
7.你所读的计算机科学方向,有哪些不错的讲义(Notes)?
链接: https://www.zhihu.com/question/38300204
8.哪本《数据结构与算法》最好?
链接: https://www.zhihu.com/question/21628833
9.用浅显易懂的方式来讲解数据结构和算法
链接: https://zhuanlan.zhihu.com/DataStructureAndAlgorithm
10. 我的数据结构之路
链接: https://zhuanlan.zhihu.com/data-structure
11. 算法数据结构中有那些奇技淫巧
链接: https://www.zhihu.com/question/33776070