算法基础类

算法基础类介绍

Firstly   ->   Bag


 

        Bag类就是一个存放东西的地方,形象起来就是一个存钱罐,可以往里面放东西,也可以瞥一眼里面有什么东西,不可以把东西从里面拿出来,除非destory它。

  

 

public interface Bag<T> extends Iterable<T>{
    void add (T t);
    boolean isEmpty();
    int size();
}
BagInterface

  具体的实现有2种,一种用数组向下面这样子

  

 

  插入对象的时候,从index为0的地方开始,一个一个插入数组, 比如插入一个100。还需要注意的一点是,当插入元素的大小超过了数组的大小的时候,需要重新new一个大些的数组,把元素一个一个的复制回去。

  

  第二种实现就是使用Linked的方式,创建一个节点对象(Node 对象,通过对象的某个字段的来寻找到下一个对象)

  刚开始只有一个Node, 这个Node是空的

  

  当插入一个新的对象的时候,第2个对象中包含了第一个对象的引用,第二个对象能拿到第一个对象

  

  接着再插入一个

  

 

Secondly   ->   Queue


 

   queue就是一个通道其实,想象一下你洗漱后的水冲下下水道的那一瞬间,先进先去就是queue的特点。如下图

  

public interface Queue<T> extends Iterable<T>{
    void enqueue(T t);
    T dequeue();
    boolean isEmpty();
    int size();
}
Queue

  具体的实现其实和bag没什么区别,也是2种实现的方式。这里只讨论一下Linked的实现方式

  假设现在有你有如下的数据

  

   Dequeue()也就是把最新进去的那个对象给释放出来, 就变成了这样子

  

  这个时候比如插入一个ForthNode,就会变成如下

  

  所以,这是一个先进先出的一个队列模式

Thirdly   ->   Stack


 

   stack先进后出,stack和queue是相反的。stack像是吃了的东西吐出来,而queue更像是吃了的拉出来。stack有很多用途,方法调用(递归)就是用stack来实现的。

  

public interface Stack<T> extends Iterable<T> {
    void push(T t);
    T pop();
    boolean isEmpty();
    int size();
}
Stack

  具体的实现其实和bag没什么区别,也是2种实现的方式。这里只讨论一下array的实现方式。

  假设你有如下的stack对象

  

   现在要push一个D

  

  现在要pop就会变成这样子

  

 

Are you Okay环节


  那么在具体选择实现类的时候,选择哪一种比较好。linked的实现和array的实现的区别我感觉不是很大,大多是的时候你可以选择array的实现,array的实现内存使用较少。但是的resize的时候(就是元素个数大于数组的大小的时候需要resize)会花费额外的时间在把引用重新赋值上,数组数量多的话可能会对性能有影响。大多数情况下使用array就可以了。具体的代码实现 ->>>>>>>>>> https://github.com/Cheemion/algorithms/tree/master/src/com/algorithms/elementary

 

  

 

 

   

 

 

 

 

  

posted @ 2017-09-14 16:45 哇哩顾得 阅读(...) 评论(...) 编辑 收藏