python中链表和数组_Python
下载好向圈APP可以快速联系圈友
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Python 算法 03-- 数组和链表(下)-1.jpg (93.27 KB, 下载次数: 0)
2020-9-12 12:24 上传
Python 算法 03-- 数组和链表(下)-2.jpg (56.14 KB, 下载次数: 0)
2020-9-12 12:24 上传
Python 算法 03-- 数组和链表(下)-3.jpg (10.81 KB, 下载次数: 0)
2020-9-12 12:24 上传
曾经有个秃顶的面试官问了我一个问题:
数组相对于链表,为什么我们都说数组查找效率快?
Python 大星:数组占用的内存空间是连续的
面试官:还有其他的吗?
Python 大星:......
以 int 类型为例,data_type_size 占 4 个字节 ,length 为 10,计算机分配连续的内存空间 1000 - 1039,其中,内存块的首地址为 base_address = 1000。
Python 算法 03-- 数组和链表(下)-4.jpg (43.08 KB, 下载次数: 0)
2020-9-12 12:24 上传
当我们随机访问数组中的一个元素,
它会首先通过下面的寻址公式,计算出该元素存储的内存地址:
Python 算法 03-- 数组和链表(下)-5.jpg (21.27 KB, 下载次数: 0)
2020-9-12 12:24 上传
我们从这个公式可以看出,如果数组下角标从 1 开始,那么公式将多做一步减法,这也是为什么数组下角标一般从 0 开始的原因之一。
Python 算法 03-- 数组和链表(下)-6.jpg (22.1 KB, 下载次数: 0)
2020-9-12 12:24 上传
回到最开始的面试题,为什么我们都说数组查找效率快?
● 数组占用的内存空间是连续的
● 数组中都为同一类型的元素
● CPU 缓存会读入一片连续的内存空间
因为数组结构是连续的内存地址, 所以数组全部或者部分元素被连续存在 CPU 缓存里面
Python 算法 03-- 数组和链表(下)-7.jpg (38.05 KB, 下载次数: 0)
2020-9-12 12:24 上传
数组低效的 “插入” 和 “删除”?
● 插入
Python 算法 03-- 数组和链表(下)-8.jpg (58.73 KB, 下载次数: 0)
2020-9-12 12:24 上传
插入
如果在数组末尾插入元素 x,不需要移动数组中的其他元素,时间复杂度为 O(1)。如果在数组首位插入元素 x,数组中的其他元素都需要往后移动一位,最坏时间复杂度是 O (n)。因为我们在每个位置插入元素的概率是一样的,所以平均情况时间复杂度为 (1+2+…n)/n=O (n)。
● 删除
Python 算法 03-- 数组和链表(下)-9.jpg (47.5 KB, 下载次数: 0)
2020-9-12 12:24 上传
删除
跟插入数据类似,如果删除数组末尾的数据,则最好情况时间复杂度为 O (1);如果删除开头的数据,则最坏情况时间复杂度为 O (n);平均情况时间复杂度也为 O (n)。
Python 算法 03-- 数组和链表(下)-10.jpg (10.65 KB, 下载次数: 0)
2020-9-12 12:24 上传
以单向链表为例
Python 算法 03-- 数组和链表(下)-11.jpg (33.07 KB, 下载次数: 0)
2020-9-12 12:24 上传
单向链表
● 链表低效的“查找”?
我们把链表的第一个节点叫头节点,头结点记录链表的基地址,最后一个节点叫尾节点(尾节点最后指向 NULL)。
因为链表的空间是分散的,所以不具有随机访问性,如要需要访问某个位置的数据,需要从第一个数据开始找起,依次往后遍历,直到找到待查询的位置,故查找最后一个元素时,则最坏的情况时间复杂度为 O (N)。
● 链表高效的“插入” 和 “删除”
Python 算法 03-- 数组和链表(下)-12.jpg (56.55 KB, 下载次数: 1)
2020-9-12 12:24 上传
图 1 - 插入
Python 算法 03-- 数组和链表(下)-13.jpg (56.92 KB, 下载次数: 0)
2020-9-12 12:24 上传
图2 - 删除
由于链表的存储空间本身不是连续,在链表中插入或者删除元素,不需要为了内存的连续性而移动其他元素。由图 1 和 图 2中,我们可以看出只需要改变相邻节点的指针即可,故链表在插入或者删除的时间复杂度为 O (1)。
数组和链表对比图
Python 算法 03-- 数组和链表(下)-14.jpg (26.72 KB, 下载次数: 0)
2020-9-12 12:24 上传
>>>Python 算法 02--数组和链表(上)
python中链表和数组_Python相关推荐
- python中如何定义数组_python如何定义数组
展开全部 Python数组还有一个变态的使用2113方法,就是调用时可以不按参5261数顺序,对于我们掌握怎样正4102确创建1653Python数组是很有帮助的,而且也可从中学到不少编程技巧,例如委 ...
- python中多维数组_python学习笔记-多维数组
Python中初始化一个5 x 3每项为0的数组,最好方法是: multilist = [[0 for col in range(5)] for row in range(3)] 我们知道,为了初始化 ...
- python中如何定义数组_python中数组是如何使用的?
今天马哥教育要跟大家分享的文章是Python数组是如何使用的?熟悉Python的小伙伴们都知道在学习Python过程中数组是个逃不过去的一个关,既然逃不过去咱就勇敢面对它,Python入门新手和正在 ...
- python中链表是什么_python 单链表的实现
常见的数据结构有链表,队列,栈,二叉树,哈希表,图等.其中最简单的是单链表. 单链表实质是在内存上存在的一些不连续的数据,不同数据之间通过节点存储的位置信息来连接.对比数组,他们是在内存上连续存在的一 ...
- python中链表和数组_数据结构笔记(一):数组、链表|python基础教程|python入门|python教程...
https://www.xin3721.com/eschool/pythonxin3721/ (一)数组 数组(Array)是一种线性表数据结构.它用一组连续的内存空间,来存储一组具有相同类型的数据. ...
- python中字符串转数组_python字符串转数组
Python中有split()和os.path.split()两个函数,具体作用如下: split():拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list) os.path ...
- python中如何定义数组_python如何创建数组?
python如何创建数组? 更新时间:2019年02月15日18时03分 来源:python培训 浏览次数: python如何创建数组?今天传智播客的老师就来给大家说说关于python如何创建数组? ...
- python中split拆分数组_Python 数组分割
展开全部 arr = [1,2,3,6,1,6,8,1,9,7,5,1] coor, res= [], [] i = j = count = 0 for idx, num in enumerate(a ...
- python怎么定义整数数组_python中输入整数数组长度python基础语法
变量 数字类型 运算符 流程控制 while循环 dead loop continue vs break while else 变量(Varibles) W WW.002pc .COM认为此文章对&l ...
最新文章
- MySQL 常见操作指令
- Ubuntu11.04软件源--增强版
- 【以太坊】深入理解智能合约(合约调合约)
- Python中的内存管理机制
- python根据文件名获取文件路径_python 查看文件名和文件路径
- iOS开发 - Swift实现清除缓存功能
- Android 使用SeekBar调节系统音量
- 1.UNIX网络编程卷1:源码配置
- MySQL两阶段加锁
- 台式计算机时间不能同步,电脑时间同步不了怎么办
- 拨号时显示无法连接服务器失败,拨号网络常见的错误提示解释及解决方法大全...
- ffmpeg C语言视频解码
- python 显示表格数据_python显示excel表格数据-怎么用python读取excel表格的数据
- 任鸟飞FPS类型游戏绘制和游戏安全,反外挂研究(二)
- 阿里云AI平台NLP使用
- 计算机二级python综合应用题_计算机二级python真题:第5套综合应用题
- mac忘记管理员密码
- Linux新手训练营--命令大全(持续更新中)
- 宝付支付如何使用Cookie技术
- 第79届中国教育装备展完美收官,厦门再见!