数组

132 阅读1分钟

其他语言 数组 map php 只有一个数组 利用散列表实现随机访问,链表实现顺序访问,模拟顺序写入

数据结构

数组:

随机访问,删除时间复杂度高 删除O(n) 使用标记法写满清理可以均摊到O(1)

链表:

删除,添加快,访问复杂度高. 实现练习: 练习题LeetCode对应编号:206,141,21,19,876

算法:

栈:

动态扩容 应用: 函数压栈调用 中序四则运算

队列:

用数组实现的队列叫作顺序队列,用链表实现的队列叫作链式队列 链式队列: 无限制 顺序队列:有限制,循环队列 重点: head,tail指针标记 存储满时数据搬移 循环队列避免数据搬移


public class CircularQueue {
  // 数组:items,数组大小:n
  private String[] items;
  private int n = 0;
  // head表示队头下标,tail表示队尾下标
  private int head = 0;
  private int tail = 0;

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

  // 入队
  public boolean enqueue(String item) {
    // 队列满了
    if ((tail + 1) % n == head) return false;
    items[tail] = item;
    tail = (tail + 1) % n;
    return true;
  }

  // 出队
  public String dequeue() {
    // 如果head == tail 表示队列为空
    if (head == tail) return null;
    String ret = items[head];
    head = (head + 1) % n;
    return ret;
  }
}

学习源: time.geekbang.org/column/arti… github.com/wangzheng08…