栈与队列和背包

栈 (Stack)

后进先出的策略的集合类型(LIFO)


栈的示意图

栈的接口抽象如下:

interface Stack {
    public void push(E item);     // 添加一个元素
    public E pop();              // 弹出一个元素
    public E peek();           // 观察一下栈顶元素
    public boolean isEmpty();  // 栈是否为空
    int size();              // 查看栈的大小
}

一些特点:

  • 后进先出(LIFO)
  • pop()与peek()的区别是: pop后的元素将会消失, peek不会.
  • 我们只能看见栈顶的元素, 使用peek查看, 或者pop弹出.
  • 栈的实现我们可以使用数组, 也可以使用链表.

队列 (Queue)

先进先出(FIFO), 就像是经过一个管道, 谁先进, 谁先出.
严格的队列定义我们只能看到队首元素, 要查看其他的元素, 必须一一出队列.

队列示意图

队列的接口抽象如下:

interface Queue{
    void enqueue(E e);  // 添加一个元素
    E dequeue();        // 移除一个队首元素并返回
    E peek();               // 查看一个队首元素并返回
    public boolean isEmpty();  // 栈是否为空
    int size();              // 查看队列大小
}

队列的一些点:

  • 先进先出(FIFO), 就像是排队, 先到先得
  • 我们只能查看队首元素
  • 队列的实现我们也是可以使用数组, 使用链表的

背包(Bag)

背包是一种不支持从中删除元素的集合数据类型.
用来收集元素. 元素出背包的时候是没有顺序的, 就像背包一样.

在java中需要为其实现iterable接口, 遍历取出其中的元素.
其接口定义如下:

interface Bag Iterable{
    void add(E e);
    boolean isEmpty();
    int size();
    ...
}

你可能感兴趣的:(栈与队列和背包)