2.队列原理与应用场景讲解

1.链式队列和数组队列


(1)数组队列

    队列与栈的最大特点就是:队列有队头和队尾指针(下标),而栈只有顶端指针(下标)。

    一句话总结两者特点:“队列吃多了会拉(头进尾出),而栈吃多了会吐 (头进头出)

public class ArrayQueue {
  private String[] items;  // 数组
  private int n = 0;       // 数组大小
  // ★★head表示队头下标,tail表示队尾下标。栈只有一个顶部下标!
  private int head = 0;
  private int tail = 0;

  // 申请一个大小为capacity的数组
  public ArrayQueue(int capacity) {
    items = new String[capacity];
    n = capacity;
  }


  // 入队
  public boolean enqueue(String item) {
    // 如果tail == n 表示队列已经满了
    // ★如果一直入队再一直出队,会造成“假满队”现象!
    if (tail == n) return false; 
    items[tail] = item;
    ++tail; //★入队尾部后移
    return true;
  }


  // 出队
  public String dequeue() {
    // 如果head == tail 表示队列为空
    // ★这里也会有假满队问题
    if (head == tail) return null;
    String ret = items[head];
    ++head; //★出队头部后移
    return ret;
  }
}

【入队和出队优化】

"假满队"问题:入队与出队操作,head和tail都会持续往后移动。当tail移动到最右边,即使数组中还有空闲空间,也无法继续往队列中添加数据。

2.队列原理与应用场景讲解2.队列原理与应用场景讲解

 

 

上一篇:Linux 常用基础命令


下一篇:linux常用命令