什么是数据结构?

◼数据结构是计算机存储、组织数据的方式

  • 线性表(数组、链表、栈、队列、哈希表)
    【数据结构与算法】动态数组_算法
  • 二叉树(AVL树、红黑树、B树、堆、Trie哈夫曼树、并查集)
    【数据结构与算法】动态数组_数据结构_02
  • 邻接矩阵、邻接表
    【数据结构与算法】动态数组_算法_03

◼在实际应用中,根据使用场景来选择最合适的数据结构

线性表

◼线性表是具有n个相同类型元素的有限序列(n ≥ 0)

【数据结构与算法】动态数组_数据结构_04

  • a1 是首节点(首元素), an 是尾结点(尾元素)
  • a1 是 a2 的前驱, a2 是 a1 的后继

◼ 常见的线性表有

  • 数组
  • 链表
  • 队列
  • 哈希表(散列表)
数组(Array)

◼ 数组是一种顺序存储的线性表,所有元素的内存地址是连续的

【数据结构与算法】动态数组_线性表_05【数据结构与算法】动态数组_线性表_06

◼在很多编程语言中,数组都有个致命的缺点:无法动态修改容量

◼实际开发中,我们更希望数组的容量是可以动态改变的

动态数组
动态数组(Dynamic Array)接口设计
int size();//元素的数量
boolean isEmpty();//是否为空
boolean contains(Eelement);//是否包含某个元素
void add(Eelement);//添加元素到最后面
E get(intindex);//返回index位置对应的元素
E set(intindex, Eelement);//设置index位置的元素
void add(intindex, Eelement);//往index位置添加元素
E remove(intindex);//删除index位置对应的元素
int indexOf(Eelement);//查看元素的位置
void clear();//清除所有元素
动态数组的设计

【数据结构与算法】动态数组_线性表_07◼在 Java 中,成员变量会自动初始化,比如

  • int 类型自动初始化为0
  • 对象类型自动初始化为 null
添加元素-add(E element)

【数据结构与算法】动态数组_线性表_08

删除元素-remove(int index)

【数据结构与算法】动态数组_动态数组_09

添加元素-add(int index, E element)

【数据结构与算法】动态数组_算法_10

扩容

【数据结构与算法】动态数组_数据结构_11

对象数组

【数据结构与算法】动态数组_动态数组_12【数据结构与算法】动态数组_动态数组_13

JDK中内置了一个动态数组类:java.util.ArrayList