数据结构基础

1.常见数据结构的特点,以及他们在不同场景下使用的优缺点

在这里插入图片描述
1.数组
分类:
无序数组,有序数组
特点:
一般针对数据量较小且数据可预知的情况,创建时指定大小,不利于扩展;在内存中预留一块连续的区域,内存空置率高利用率较低;无序数组插入较快,有序数组查询较快,利用下标访问,随机访问性强。
优点:
查询速度快
随机访问性强,遍历数组方便
缺点:
内存固定,扩展性差
数组要预留空间,内存利用率低
插入删除速度慢
只能存储一种类型的数据

2.链表的特点:
分类:
单链表、双向链表以及循环链表
特点:
创建时不指定大小,内存大小随数据量变化;内存的存储位置可以在任何地方,不要求连续,可扩展性强;每一个数据保存邻近的数据的地址,遍历需要从根节点开始,没有随机访问性,查找效率低;增加删除比较随意,效率高。
优点:
插入删除速度快
内存利用率高,不浪费内存
存储的数据类型相对灵活
大小不固定,扩展性强
缺点:
查询速度慢
只能从根节点开始查找,不具备随机访问性

3.二叉查找树
分类:
平衡二叉树,非平衡二叉树
特点:
结合数组和链表的优点,适合数据量较大的情况,具有一定顺序,左子节点值较小,右子节点值较大;查找时从根节点开始,不具备随机访问性,但相比较而言查询速度快,增删速度快,对于遍历一定范围内的数据比较方便。非平衡二叉树简单,但对于部分数据查询增删效率较低,甚至会退化成链表。
优点:
查询增删速度快
存储的数据类型相对灵活
不指定内存大小,内存利用率较高
缺点:
只能从根节点开始查询,不具备随机访问性
对于部分数据,给平衡二叉树的效率会向链表结构靠拢

4.平衡树
实现:
AVL树、红黑树、2-3树等
特点:
改善了二叉搜索树的缺点,实现起来稍微复杂,平衡树结构会产生了额外消费,但查询及增删效率均比较高
优点:
查询速度较快
增删速度较快
存储的数据类型相对灵活
不指定内存大小,内存利用率较高
缺点:
实现起来复杂
会产生一定的额外消费

5.哈希表
实现方式:
开放地址法、链地址法
优点:
插入删除速度最快
缺点:
基于数组,创建后扩展性差
弱序,查找速度慢
基于哈希映射,会有冲突产生,并形成数据聚集
需预留内存,内存利用率不高
在这里插入图片描述

2.理解数组、字符串的存储原理,并熟练应用他们解决问题
  • 数组是复杂数据类型存储再堆里、字符串是简单数据类型存储再栈中
  • 栈( Stack)
  • 栈是一种特殊的线性表,它只能在一个表的一个固定端进行数据结点的插入和删除操作。栈按照后进先出的原则来存储数据,也就是说,先插入的数据将被压入栈底,最后插入的数据在栈顶,读出数据时,从栈顶开始逐个读出。栈在汇编语言程序中,经常用于重要数据的现场保护。栈中没有数据时,称为空栈。
  • 堆(Heap)
  • 堆是一种特殊的树形数据结构,一般讨论的堆都是二叉堆。堆的特点是根结点的值是所有结点中最小的或者最大的,并且根结点的两个子树也是一个堆结构
    JavaScript基本类型数据都是直接按值存储在栈中的(Undefined、Null、不是new出来的布尔、数字和字符串),每种类型的数据占用的内存空间的大小是确定的,并由系统自动分配和自动释放。这样带来的好处就是,内存可以及时得到回收,相对于堆来说 ,更加容易管理内存空间。
  • JavaScript引用类型数据被存储于堆中 (如对象、数组、函数等,它们是通过拷贝和new出来的)。其实,说存储于堆中,也不太准确,因为,引用类型的数据的地址指针是存储于栈中的,当我们想要访问引用类型的值的时候,需要先从栈中获得对象的地址指针,然后,在通过地址指针找到堆中的所需要的数据。
3.理解二叉树、栈、队列、哈希表的基本结构和特点,并可以应用它解决问题

https://blog.csdn.net/u014419014/article/details/78770812

4.至少理解五种排序算法的实现原理、应用场景、优缺点,可快速说出时间、空间复杂度

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值