Java拓展——常见数据结构(数组,栈,链表,树,图)

Java基础11——数据结构

文章目录

  • Java基础11——数据结构
  • 数据结构
    • 常见的数据结构
      • 数组
        • 栈简介
        • 如何创建一个类实现栈的功能?
        • **栈使用场景**
  • 队列
        • 队列简介
        • 如何实现?
        • **队列分类**
  • 链表
      • **单链表**
      • **循环链表**
      • **双向链表**
      • **双向循环链表**
      • **链表使用场景**
      • **数组** **vs** **链表**
    • **二叉树分类**
        • **满二叉树**
        • **完全二叉树**
        • **平衡二叉树**
      • **二叉树的存储**
        • **链式存储**
        • **顺序存储**
    • **二叉树的遍历**
        • **先序遍历**
        • **中序遍历**
        • **后序遍历**
    • **二叉排序树**
        • **为什么使用二叉排序树**
        • **使用链表存储**
        • **使用二叉排序树存储**
      • **什么是二叉排序树**
  • **红黑树**
        • **什么是红黑树**
        • **为什么要用红黑树**
        • **旋转和变色**
        • **红黑树的优缺点**
        • **旋转和变色**
        • **红黑树的优缺点**

数据结构

数据结构是计算机科学中的一个重要概念,用于组织和存储数据以便有效地进行访问、操作和管理。它涉及了如何在计算机内存中组织数据,以便于在不同操作中进行查找、插入、删除等操作

数据结构可以看作是一种数据的组织方式,不同的数据结构适用于不同的应用场景,根据操作的需求和效率要求,选择合适的数据结构可以提高算法的执行效率。

常见的数据结构

  • 数组(Array) 将相同类型的数据元素按顺序存储在连续的内存单元中,可以通过索引快速访问元素,定长。

  • 哈希表(Hash Table):通过散列函数将键映射到值,实现高效的数据查找和插入

  • 栈(Stack) 一种具有后进先出(LIFO)特性的数据结构,常用于处理函数调用、表达式求值等。

  • 队列(Queue):一种具有先进先出(FIFO)特性的数据结构,常用于任务调度、广度优先搜索等。

    • Java拓展——常见数据结构(数组,栈,链表,树,图)_第1张图片
    • 像生活中安检机
  • 链表(Linked List):通过节点与节点之间的引用(指针)链接来存储数据,分为单向链表和双向链表、循环链表,对于插入和删除操作较为高效。

  • 树(Tree):一种层次结构的数据结构,包括二叉树、平衡树、二叉搜索树等,常用于搜索和排序操作。

  • 图(Graph):由节点和边构成的数据结构,用于表示各种复杂的关系和连接。

数组

数组(Array) 是一种很常见的数据结构。它由相同类型的元素(element)组成,并且是使用一块连续的内存来存储。

我们直接可以利用元素的索引(index)可以计算出该元素对应的存储地址。数组的特点是:提供随机访问 并且容量有限。

假如数组的长度为 n。

访问:O(1)//访问特定位置的元素

插入:O(n )//最坏的情况发生在插入发生在数组的首部并需要移动所有元素时

删除:O(n)//最坏的情况发生在删除数组的开头发生并需要移动第一元素后面所有的元素时

Java拓展——常见数据结构(数组,栈,链表,树,图)_第2张图片

栈简介

  • 栈 (Stack) 只允许在有序的线性数据集合的一端(称为栈顶 top)进行加入数据(push)和移除数据(pop)。因而按照 后进先出(LIFO, Last In First Out)的原理运作。

  • 在栈中,push 和 pop 的操作都发生在栈顶。

  • 栈常用一维数组或链表来实现,用数组实现的栈叫作 顺序栈 ,用链表实现的栈叫作 链式栈

如何创建一个类实现栈的功能?

  • 底层存元素使用数组
  • 添加元素始终添加到数组的最后一个
  • 获取元素时永远从最后一个开始取元素
  • 扩容问题
  • 栈既可以通过数组实现,也可以通过链表来实现。

Java拓展——常见数据结构(数组,栈,链表,树,图)_第3张图片

栈使用场景

  • 实现浏览器的回退和前进功能
  • 反转字符串,将字符串中的每个字符先入栈再出栈就可以了
  • 方法之间的调用
public 

你可能感兴趣的:(java,Java基础,数据结构,java,链表)