【无标题】

数据结构

数组、链表(单向链表和双向链表)、栈、队列、二叉树、哈希表、堆、图(这个俺也不太明白)。

先从概念说起吧:

数组

定义:数组是存放在连续内存空间上的相同类型数据的集合。
一维数组
在这里插入图片描述
在内存中一块连续的区域,连续存放同类型数据的内容。可以想象成抽屉。
在这里插入图片描述

二维数组
在这里插入图片描述
二维数组可以想象成中药柜。
在这里插入图片描述

链表

数组是在内存中是连续分布的,但是链表在内存中可不是连续分布的。
链表包含单链表(初级)、双链表(中级)和循环链表(循环链表就别看了吧,这是高级)。
单链表:
在这里插入图片描述
双链表:
在这里插入图片描述
循环链表:
在这里插入图片描述

数组是由一个一个元素组成的,而链表是由一个一个结点组成的。
链表中的结点包含两个元素,一个元素是内容,一个元素是下一个结点的地址。
(链表你体会一下吧,我还真一下子想不出到底可以比喻成啥,加油)

栈和队列

在这里插入图片描述
栈的特点是先入后出,队列的特点是先入先出。
栈就像一口井或者一个箱子,一端是开口的,一端是封闭的。而队列是两端都是开口的。

二叉树

二叉树和链表一样都是链式存储(二叉树也可以顺序存储),不同的是,二叉树中每一个节点包含三个元素,一个是节点的内容,一个是左节点的地址,一个是右节点的地址。
了解一些二叉树中的常用概念。
满二叉树、完全二叉树、二叉搜索树和平衡二叉搜索树,下面将一个一个进行介绍。

满二叉树

在这里插入图片描述

完全二叉树

在这里插入图片描述

二叉搜索树

有数值的二叉树,左边节点都小于根节点,右边节点的数值都大于根节点。
在这里插入图片描述

平衡二叉搜索树

它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
在这里插入图片描述
比如左图,根节点的左节点有两层,而右节点有一层,两边相差一层(最大不能超过一层就是平衡树)。
而最右边的图根节点的左节点有两层,而右节点一层都没有,所以右图不是平衡树。

哈希表

在这里我们要了解几个概念,哈希表、哈希函数、哈希碰撞(有拉链法和线性探测法)。

哈希表中典型的三个数据结构:集合、映射和数组。

在这里插入图片描述
针对上图的解释:哈希函数,把学生的姓名直接映射为哈希表上的索引,然后就可以通过查询索引下标快速知道这位同学是否在这所学校里了。通过hashCode把名字转化为数值,一般hashcode是通过特定编码方式,可以将其他数据格式转化为不同的数值,这样就把学生名字映射为哈希表上的索引数字了。

哈希碰撞:这个概念就是出现不同的名字通过哈希函数映射到了相同的索引位置,这就会导致同一个索引对应于两个学生的姓名。那怎么把两个不同的学生姓名放到哈希表的一个位置呢?
图示哈希碰撞:
在这里插入图片描述

有两种解决哈希碰撞的方法:拉链法和线性探测法。
拉链法
在这里插入图片描述
拉链法采取的方式就是就是在索引的位置用一个链表进行标识,这样就实现了在一个位置存放多个元素的可能。
线性探测法
在这里插入图片描述
线性探测法就是在索引的位置开辟一段新的空间来存放出现哈希冲突的元素。

在这里理解三个概念就行,分别是大根堆、小根堆和堆排序。
堆其实就是一种二叉树的形式。可以被看作一棵完全二叉树的数组对象。
大根堆(最大堆)就是根节点的元素值永远比子节点的元素值高,小根堆(最小堆)反之。
在这里插入图片描述
堆排序有点复杂(待续)

算法

递归、迭代、回溯、动态规划、贪心算法、双指针算法。

下面开始针对上述数据结构来提问,当然数据结构一般都会结合算法一起提问,算法就是基于数据结构的算法。

在这里插入图片描述

什么叫算法的稳定性?

给定一个等待排序的序列,假设序列中有2个相等的数,如果这两个相等的数,在排序前后相对前后位置发生了变化,则该算法可以认定为不稳定。反之即为稳定的算法。

  • 25
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值