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

什么是数据结构?

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

  • 线性表(数组、链表、栈、队列、哈希表)
    线性表
  • 二叉树(AVL树、红黑树、B树、堆、Trie哈夫曼树、并查集)
    二叉树
  • 邻接矩阵、邻接表
    图形结构

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

线性表

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

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

◼ 常见的线性表有

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

◼ 数组是一种顺序存储的线性表,所有元素的内存地址是连续的
定义数组堆栈空间示意图
◼在很多编程语言中,数组都有个致命的缺点:无法动态修改容量
◼实际开发中,我们更希望数组的容量是可以动态改变的

动态数组
动态数组(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();//清除所有元素
动态数组的设计

动态数据的设计◼在 Java 中,成员变量会自动初始化,比如

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

添加元素

删除元素-remove(int index)

删除元素

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

添加元素

扩容

扩容

对象数组

定义对象数组对象数组模型

JDK中内置了一个动态数组类:java.util.ArrayList
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章