十大常用数据结构

转载 2015年11月19日 13:47:42
一、栈:

1、后缀表达式的求值;
2、中缀到后缀表达式的转换;
3、深度优先搜索的非递归实现;
4、动态规划的优化:用于维护一个凸序列,便于二分查找,如LIS问题的O(nlgn)算法。

二、队列:
1、树的层序遍历;
2、广度优先搜索;
3、Bellman-Ford算法的SPFA实现;
4、网络流中FF算法的Edmonds-Karp实现,以及Preflow算法的队列优化实现。


三、二叉搜索树:

1、对大量的关键字的索引查找;
2、有很多平衡策略以改善其平均性能:
常用平衡树:AVL,红黑树,随机化BST,Splay Tree,Treap(或叫笛卡儿树)。

四、散列表(hash表):
1、一般针对值域较大但状态很稀疏的应用,比如状态压缩记忆化搜索;
2、实现映射功能。

五、检索树(Trie):
1、一般用于字符串索引算法,速度快,但占用空间较大(相对hash);
2、常用的改进结构:Patricia线索树,多叉检索树(TST)。

六、优先队列:

1、常用的是二叉堆的实现,具体应用如堆排序和Dijkstra算法;
2、当需要快速合并两个优先队列时,常用二项式队列,实现简单。
3、注意最大最小堆的配对使用。

七、线段树和树状数组:

1、两者都可以用于离散对象的统计;
2、后者的步进函数的性质和应用值得注意;
3、前者基本上适用于任何的区间操作,如求区间最值,改变区间的值等。
4、线段树还可以用于优化状态的枚举,经常和动态规划结合。

八、后缀树与后缀数组:

1、总体规律是两者的实现都比较复杂,前者更甚,但是前者的功能也更强大;
2、几乎可以解决所有常见的关于字符串的算法,如最长回文子串,最长重复子串,以及很多的模式匹配问题。

九、并查集:

1、解决无向图的连通性问题,如用于Kruskal算法;
2、解决等价关系的查询(这是它的主要用武之地),如05年Baidu之星初赛的石头剪子布游戏;
3、优点是实现异常简单,缺点是合并后无法分离,若需要可以选择用动态树。

十、邻接表和边表:

1、表示图的最直接的方法;
2、后者更省空间,并且在一定程度上更好用,比如Bellman-Ford算法。
ps:数组、链表太基础不在考虑之列。

相关文章推荐

十大常用数据结构

一、栈: 1、后缀表达式的求值; 2、中缀到后缀表达式的转换; 3、深度优先搜索的非递归实现; 4、动态规划的优化:用于维护一个凸序列,便于二分查找,如LIS问题的O(nlgn)算法。 二、队列: 1...

UnityCode常用数据结构大起底

匹夫细说Unity3D(四)——常用数据结构大起底 1.几种常见的数据结构  这里主要总结下小匹夫在工作中常碰到的几种数据结构:Array,ArrayList,List,LinkedList,Que...

游戏制作中的大宝剑---常用的数据结构与算法

前言    时间流逝,物是人非,就好像涌动的河流,永无终焉,幼稚的心智将变得高尚,青年的爱慕将变得深刻,清澈之水折射着成长。                                      ...

Java大课堂:常用数据结构一

Java大课堂:常用数据结构一 背景 在计算机科学的学习中,数据结构是个绕不开的问题。那么我将在接下来的时间,简明扼要的介绍常见数据结构以及部分源码。下面我将简单介绍本大课堂涉及到的内容。 众所周知...

ACM常用模板——数据结构——区间第K大

ACM常用模板——数据结构——区间第K大

数据结构与算法-5大常用算法总结

1.贪心算法基本思想:贪心算法分阶段工作,在每一阶段,可以认为所做的决定是好的,而不考虑将来的后果。意味着选择的是局部最优,如果刚好是全局最优则算法正确,否则得到的是一个次优解。所有可以应用于不需要得...

数据结构常用算法

  • 2014年12月26日 14:23
  • 260KB
  • 下载

常用数据结构

  • 2015年03月12日 22:45
  • 1.92MB
  • 下载

erlang 常用数据结构

ordsets 是lists实现的有序集合.由于数据元素的变动都会触发重新排序,所以ordsets效率不高,只适用于数据量比较小的场景.ordsets中包含了常见的集合操作:求交集,并集,是否为子集,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:十大常用数据结构
举报原因:
原因补充:

(最多只允许输入30个字)