数据结构包括数组、链表、栈、二叉树、哈希表等等html
数据结构 | 优势 | 缺点 | |
数组 | 插入快 | 查找慢、删除慢、大小固定 | |
有序数组 | 查找快 | 插入慢、删除慢、大小固定 | |
栈 | 后进先出 | 存取其余项很慢 | |
队列 | 先进先出 | 存取其余项很慢 | |
链表 | 插入、删除快 | 查找慢 | |
二叉树 | 查找、插入、删除快 | 算法复杂(删除算法) | |
红黑树 | 查找、插入、删除快 | 算法复杂 | |
hash表 | 存取极快(已知关键字)、插入快 | 删除慢、不知关键字时存取很慢、对存储空间使用不充分 | |
堆 | 插入快、删除快、对大数据项存取快 | 对其余数据项存取慢 | |
图 | 依据现实世界建模 | 算法有些复杂 | |
AVL树 | 查找、插入、删除快 | 算法复杂 |
总结:算法
通用数据结构:数组,链表,树,哈希表数据库
它们被称之为通用的数据结构是由于它们经过关键字的值来存储并查找数据,这一点在通用数据库程序中常见到(栈等特殊结构正好相反,它们只容许存取必定的数据项)。数组
通用数据结构能够彻底按照速度的快慢来分类:数组和链表是最慢的,树相对较快,哈希表是最快的。数据结构
但并非使用最快的结构永远是最好的方案。这些最快的结构也有缺陷,首先,它们的程序在不一样程度上比数组和链表的复杂;其次,哈希表要求预先知道要存储多少数据,数据对存储空间的利用率也不是很是高。普通的二叉树对顺序的数据来讲,会变成缓慢的O(N)级操做;而平衡树虽然避免了上述的问题,可是它的程序编制起来却比较困难。post
数组在下列状况下颇有用:1数据量较小 2数据量的大小事先可预测 3若是存储空间足够大的话,能够放松第二条,建立一个足够大的数组来应付全部能够预见的数据输入。大数据
若是插入速度很重要的话,使用无序数组。若是查找速度很重要的话,使用有序数组,并用二分查找。数组元素的删除老是很慢,这是因为为了填充空出来的单元,平均半数以上的数组元素要被移动。在有序数组中的遍历是很快的,而在无序的数组不支持这种功能。spa
若是须要存储的数据量不能预知或者须要频繁地插入删除数据元素时,考虑使用链表。当有新的元素加入时,链表就开辟新的所须要的空间,因此它甚至能够占满所有可用内存;在删除过程当中没有必要像数组那样添补“空洞”。.net