数据结构学习笔记(一)概述

数据结构分类

数组

数组是在内存中连续存储多个相同类型元素的结构,数组中的元素通过数组下标进行访问。
数组下标从0开始,例如下面这段代码就是将数组的第一个元素赋值为1。

int[] data = new int[100];
data[0] = 1;

优点:
1、按照索引查询元素速度快
2、按照索引遍历数组方便
缺点:
1、大小固定:数组大小固定后不能改变
2、数据类型单一:数组只能存储一种类型的数据
3、添加与删除慢:因为要移动其他元素,所以添加,删除的操作慢。
适用场景:
频繁查询,对存储空间要求不大,很少增加和删除。

栈是一种特殊的线性表,仅能在栈顶进行操作。从栈顶放入元素叫入栈,取出元素叫出栈。栈的特点:先进后出。
在这里插入图片描述
适用场景:
常应用于实现递归功能方面的场景,例如斐波那契数列。(斐波那契数列的实现及如何应用可以在我的文章目录中查看)

队列

队列也是一种线性表,不同的是,队列在一端添加元素,称为入队;而在另一端取出元素,称为出队。即:先进先出。
在这里插入图片描述
如上图所示,入队时调用rear指针(rear指针始终指向元素的下一个单元,又或始终指向元素即将入队的位置),出队时调用front指针(front指针始终指向即将出队元素)
适用场景:
因为队列先进先出的特点,在多线程阻塞队列管理中非常适用。(多线程阻塞队列的基本知识可以博主文章列表中查找)

链表

链表是指物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,每个元素包含两个节点,一个是链表该单元元素对应内存空间,另一个是指向下一个节点地址的指针域。根据指针的指向,链表能形成不同的结构,例如单链表、双向链表、循环链表等。
在这里插入图片描述
优点:
1、容量可改变:链表不需要初始化容量,可以任意加减元素。
2、添加,删除快:添加、删除元素时只需要改变前后两个元素结点的指针与指向地址即可。
缺点:
1、空间占用大:大量的指针域占用很多空间。
2、查找元素耗时大:查找元素需要遍历整个链表,遍历过程包含很多指针的调用,十分耗时。
适用场景:
数据量较小,需要频繁增加、删除操作的场景。

树是由n(n>=1)个有限节点组成的一个具有层次关系的集合,根朝上叶朝下,它具备以后特点:

  • 每个节点有0个或多个子节点
  • 没有父节点的节点称作根节点
  • 每个非根节点有且仅有一个父节点
  • 除了根节点外,每个子节点可以分为多个不相交的子树
    在这里插入图片描述
    如上图所示为二叉树,其特点如下:
  • 每个节点最多有两颗子树,即节点的度最大为2
  • 左子树和右子树是有顺序的,不能颠倒,即使某节点只有一个子树,也要区分左右子树。
    优点:
    二叉树既有链表的好处:添加、删除元素很快;也有数组的好处:查找方面有很多的算法优化。
    适用场景:
    处理大批量的动态数据方面非常有用。
    扩展数据结构:
    平衡二叉树、红黑树、B+树等(树的相关知识可在文章列表中找到)

散列表

散列表也叫哈希表(基于数组衍生的数据结构),是根据关键码(key)和值(value)直接进行访问的数据结构,通过key和value来映射到集合中的一个位置,这样就可以很快扎到集合中的对应元素。
记录的存储位置=f(key)%数组长度
这里的对应关系f称为散列函数,又称为哈希,而散列表就是把key通过哈希函数转换为一个整形数字,然后将该数字对数组长度进行取余,取余结构当作数组的下标,将value存储在以该数字为下标的数组空间里,这种存储空间可以充分利用数组的查找优势来查找元素,所以查找速度很快。
因为数组的增加删除慢,所以哈希表还需要用到链表,即拉链法:添加、删除元素指的是根据元素的一些特征把元素分配到不同的链表中去;同时删除元素也根据元素特征找到链表再找到元素。如下图:
在这里插入图片描述
图中,左边是一个数组,数组的每个成员包括一个指针,指向一个链表的头,该链表可以为空也可以包含很多元素,值得注意的是应用此数据结构需要解决哈希冲突的问题。(哈希冲突问题的知识可以在博主文章列表中找到)

堆可以被看做一棵树的数组对象,具有以下性质:

  • 堆中某个节点的值总是不大于或不小于其父节点的值
  • 堆总是一颗完全二叉树

堆的分类:(均为完全二叉树)
最大堆/大根堆:根节点最大的堆
最小堆/小根堆:根节点最小的堆
大顶堆:n个元素的序列{k1,k2,ki,…,kn},满足ki >= k2i,ki >= k2i+1
小顶堆:n个元素的序列{k1,k2,ki,…,kn},满足ki <= k2i,ki <= k2i+1

在这里插入图片描述
适用场景:
因为堆的有序特点,一般用来做数组中的排序,称为堆排序。

图由节点的有穷集合V和边的集合E组成。为了与树形结构加以区别,在图结构中常常将节点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。
图的分类:
按照顶点指向的方向可以分为有向图和无向图:
在这里插入图片描述
在这里插入图片描述
图在存储数据上有着比较复杂和高效的算法,包括:邻接矩阵、邻接表、十字链表、邻接多重表、边集数组等存储结构。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值