<数据结构与算法> 学习记录

原创 2016年09月02日 10:06:08

正文

  • 表、栈、队列:

  • 1.表的简单实现:数组
    2.为了避免插入和删除的线性开销,表可以不连续存储。
    链表,由一系列节点组成,这些节点不必再内存中相连。每一个节点均含有表元素和到包含该元素后继元素的链,也称为next链。
    这里写图片描述
    双链表,让每一个节点持有一个指向它在表中的前驱节点的链。
    这里写图片描述

    List类,ArrayList类和LinkedList类:
    ArrayList与LinkedList对比
    1.ArrayList首先提供了List ADT的一种可增长数组的实现。其的优点在于,对get和set的调用花费常数时间,缺点是,新项的插入和现有项的删除代价敖贵,除非在ArrayList的末端进行。
    2.LinkedList提供了List ADT的双链表实现。其优点在于,对新项的插入和现有项的删除均开销很小。但其缺点是他不容易做索引,对此get的调用是很昂贵的。
    对于搜索而言,ArrayList和LinkedList都是低效的,对于Collection的contains和remove的调用均花费线性时间。
    ArrayList的底层实现是数组。
    LinkedList的底层实现是node节点。

  • :是限制插入和删除只能在一个位置上进行的表,该位置在栈的末端,叫做栈顶。对栈的基本操作有push进栈和pop出栈。
    栈的底层实现还是表,因此ArrayList和LinkedList都支持栈的操作。单链表也可实现。
  • 队列ADT
    像栈一样,队列也是表。

  • :对于大量的输入数据,链表的线性访问时间太慢,不宜使用。

  • 二叉查找树:是两种库集合类TreeSet和TreeMap实现的基础。
  • 树的表现方式,递归。根和若干子树组成。实现树的方法可以事在每一个节点除数据外还要有一些链,使得该节点的每一个儿子都有一个链指向它。
  • 遍历树的策略分先序遍历和后序遍历。
  • 二叉树:其中每个节点都不能有多于两个的儿子。

Java常用数据结构总结

  • ArrayListVector
    相同的:
    1.都是采用数组方式存储数据
    2.都允许直接序号索引元素
    3.索引数据快,插入数据慢
    不同点:
    1.Vector使用synchronized方法(线程安全)性能差,时间慢
    2.ArrayList使用双向链表实现存储,插入速度快
  • 线性表链表哈希表
    Collection
    ├List
    │├LinkedList
    │├ArrayList
    │└Vector
    │ └Stack
    └Set
    │├TreeSet
    │├HashSet
    Map
    ├TreeMap
    ├Hashtable
    ├HashMap
    └WeakHashMap

    1.Collection:它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素
    2.LinkedList:LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)
    注:LinkedList**没有同步**方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:
        List list = Collections.synchronizedList(new LinkedList(…));
        使用情景:涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素
      3.ArrayList:和LinkedList一样,ArrayList也是非同步的(unsynchronized)
      使用情景:需要快速随机访问元素
      4.Vector:Vector非常类似ArrayList,但是Vector是同步的。但必须捕获ConcurrentModificationException异常
      5.Stack : Stack继承自Vector,实现一个后进先出的堆栈
      6.Set : Set是一种不包含重复的元素的Collection
      6.1.TreeSet:根据二叉树实现的,也就是TreeMap, 放入数据不能重复且不能为null,可以重写compareTo()方法来确定元素大小,从而进行升序排序。
      7.Map : Map没有继承Collection接口,Map提供key到value的映射
      8.Hashtable :Hashtable继承Map接口,实现一个key-value映射的哈希表,Hashtable是同步的。
      9.HashMap : 和Hashtable类似,不同之处在于HashMap是非同步的
      10.WeakHashMap:WeakHashMap是一种改进的HashMap,它对key实行“弱引用”,如果一个key不再被外部所引用,那么该key可以被GC回收
    关于同步建议:在《Practical Java》一书中Peter Haggar建议使用一个简单的数组(Array)来代替Vector或ArrayList。尤其是对于执行效率要求高的程序更应如此。因为使用数组(Array)避免了同步、额外的方法调用和不必要的重新分配空间的操作。
    11.树形数据结构:树结合了两种数据结构的有点:一种是有序数组,树在查找数据项的速度和在有序数组中查找一样快;另一种是链表,树在插入数据和删除数据项的速度和链表一样
    12.二叉树 :二叉树的遍历有三种:先序、中序、后序,每种又分递归和非递归
    这里写图片描述

Java常用数据结构总结

  • SpareArray :SparseArrays map integers to Objects. Unlike a normal array ofObjects, there can be gaps in the indices. It is intended to be more efficientthan using a HashMap to map Integers to Objects
  • 大概意思是SparseArrays是映射Integer—> Objects 类型的,就像这样: SparseArrays< Object>而且在指数级别的数量的增长上来说和HashMap相比较的话,性能方面SparseArrays更好

参考文章

http://blog.csdn.net/hunter4ever/article/details/6912693
http://blog.csdn.net/zhangerqing/article/details/8822476
http://blog.csdn.net/u011803341/article/details/52777959
http://poarry.blog.51cto.com/5970996/1633205/

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

基于 Python 的数据结构与算法分析学习记录(6-7)—— 树的遍历

前序 在前序遍历中,我们首先访问根节点,然后递归地做左侧子树的前序遍历,随后是右侧子树的递归前序遍历。中序 在一个中序遍历中,我们递归地对左子树进行一次遍历,访问根节点,最后递归遍历右子树。 后序 在...

基于 Python 的数据结构与算法分析学习记录(6-10)—— 二叉堆实现

我们将利用二叉树的对数性质来表示我们的堆。 为了保证对数性能,我们必须保持树平衡。平衡二叉树在根的左和右子树中具有大致相同数量的节点。 一个完整的二叉树是一个树,其中每个层都有其所有的节点,除了树的最...

基于 Python 的数据结构与算法分析学习记录(6-6)—— 分析树

分析树可以用于表示诸如句子或数学表达式的真实世界构造。在本节的其余部分,我们将更详细地检查分析树。 特别的,我们会看 如何从完全括号的数学表达式构建分析树。 如何评估存储在分析树中的表达式。 如何从分...

基于 Python 的数据结构与算法分析学习记录(6-5)——树的节点表示

要记住这个表示重要的事情是 left 和 right 的属性将成为对 BinaryTree 类的其他实例的引用。 例如,当我们在树中插入一个新的左子节点时,我们创建另一个 BinaryTree 实例,...

Python数据结构与算法分析学习记录(2)——基于Problem Solving with Algorithms and Data Structures using Python的学习

2.1.目标 了解为何算法分析的重要性 能够用大“O”表示法来描述算法执行时间 了解在 Python 列表和字典类型中通用操作用大“O”表示法表示的执行时间 了解 Python 数据类型的具体实现对算...

<记录>从零学数据结构算法——线性表

1.定义一个接口 IList .javapackage zcf; /** * 增删改查 输出 遍历 * @author zcf * */ public interface IList { ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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