数组和链表

数据结构和算法

程序 = 算法 + 数据结构

# 数据结构:数据的组织形式
	-数字
    -字符串
    -数组
    -链表
    -字典
    -对象
    
# 什么是算法:
	算法就是你写的那堆代码,那堆逻辑

数组和链表

数组和链表是我们最常用也是最基本的数据结构,严格来说基础的数据结构就只有两种,就是数组和链表,其他的各种高阶的数据结构都是从数组和链表中衍生出来的,所以说数组和链表是一切数据结构的根本,我们完全有必要更深层次的理解这两种数据结构

什么是数组

	-内存中连续存储的空间
    -数组它是由相同类型的元素的集合所组成的一种线性数据结构
# 什么是链表
	-链表是一种不要求内存连续的顺序存储数据结构,它的数据节点可以分布在内存中的各个地方,节点之间是各自记录着下一个元素的指针,通过指针把所有节点串联起来组成了一条链装的结构

数组和链表的操作

# 数组的插入,删除,扩容,缩容
	-把赵六插入到第1个位置,需要把从第一个位置开始,都要往后移动
	['zs'   'ls'     'ww'   'oo']
    -插入元素:时间复杂度和空间复杂度都是O(n)
    -删除元素:时间复杂度和空间复杂度都是O(n)
    -查找元素:时间复杂度和空间复杂度都是O(1)
    
    -大O表示法:时间复杂度,空间复杂度--->衡量算法优劣标准
    O(1) :一次操作就能完成
    O(log n):数据大小的一半操作就能完成
    O(n):数据大小操作就能完成:一层for循环完成
    O(n方):两层for循环

# 链表插入,删除,扩容,缩容
	'zs' --->  'ls'  --->    'ww' --->   'oo'
    -插入元素:时间复杂度和空间复杂度都是O(1)
    -删除元素:时间复杂度和空间复杂度都是O(1)
    -查找元素:时间复杂度和空间复杂度都是O(n)
    -单向链表
    -双向链表
    -循环链表
    -如果判断链表中是否有环

拓展

# java:List:ArrayList   LinkedList   
# python:列表--->基于数组
	-插入元素,删除元素

    
# redis的hash类型(字典类型)-->底层基于数组
	-开放寻址法:当发生hash冲突时,会以当前地址为基准,然后根据寻址方法(探查寻址),去寻找下一次地址。若依旧发生冲突,则继续寻址,直到找到一个空的位置为止
    	-线性探测法
        -平方探测法(二次探测)
	-链地址法(最多:java:HashMap): 在冲突位置创建链表--->普通链表,平衡二叉树,红黑树
    -再hash法:多个hash函数
    -建立公共溢出区:将哈希表分为基本表和溢出表,将发生冲突的都存放在溢出表中

posted @ 2023-08-28 18:10  星空看海  阅读(10)  评论(0编辑  收藏  举报