通用数据结构:数组、链表、树、哈希表
专用数据结构:栈、队列、优先级队列
排序:插入排序、希尔排序、快速排序、归并排序、堆排序
图:邻接矩阵、邻接表
外部存储:顺序存储、索引文件、B-树、哈希方法
通用数据结构
通过关键字的值来存储并查找数据。
数组和链表是最慢的,树相对较快,哈希表最快。但哈希表复杂,要先预知要存储多少数据,存储空间利用率也不高。
关系图:
Java只存储引用而不是实际的对象,所以大多数Java算法执行速度更快。分析算法时,也只是考虑对象引用的移动。
数组删除元素很慢;若存储数据大小不清楚或要频繁插入删除数据,则考虑链表;哈希表对数据插入顺序不敏感,且哈希表不能提供有序遍历,也不能对最大最小值元素进行存取。
通用结构顺序的比较:
专用数据结构
在程序中辅助实现一些算法。栈、队、优先级队列等,是抽象数据结构(ADT),它们又由一些更加基础的结构如数组、链表或堆组成。
栈:一般通过数组或链表实现,链表比数组稍慢一些,因为链表有分配内存和回收分配内存的过程。
队:可通过数组或双端链表实现,链表必须是双端的,这样才能一端插入一端删除。
优先级队列:可通过有序数组、双端链表或堆实现,访问最高优先级数据时使用。若注重速度则用堆。
专用结构的比较:
排序
图
不存储通用数据,直接模拟现实世界的情况。
如何表示图:使用邻接矩阵或邻接表。稠密图用邻接矩阵,稀疏图用邻接表。
外部存储
若数据量大到内存容不下时,只能被存到外部存储空间,即磁盘文件。
如何选择外部存储: