python列表是顺序表还是链表_顺序表与链表

Python中的顺序表

Python中的list和tuple两种类型采用了顺序表的实现技术,具有前面讨论的顺序表的所有性质。

tuple是不可变类型,即不变的顺序表,因此不支持改变其内部状态的任何操作,而其他方面,则与list的性质类似。

list的基本实现技术

Python标准类型list就是一种元素个数可变的线性表,可以加入和删除元素,并在各种操作中维持已有元素的顺序(即保序),而且还具有以下行为特征:

基于下标(位置)的高效元素访问和更新,时间复杂度应该是O(1);

为满足该特征,应该采用顺序表技术,表中元素保存在一块连续的存储区中。

允许任意加入元素,而且在不断加入元素的过程中,表对象的标识(函数id得到的值)不变。

为满足该特征,就必须能更换元素存储区,并且为保证更换存储区时list对象的标识id不变,只能采用分离式实现技术。

在Python的官方实现中,list就是一种采用分离式技术实现的动态顺序表。这就是为什么用list.append(x) (或 list.insert(len(list), x),即尾部插入)比在指定位置插入元素效率高的原因。

在Python的官方实现中,list实现采用了如下的策略:在建立空表(或者很小的表)时,系统分配一块能容纳8个元素的存储区;在执行插入操作(insert或append)时,如果元素存储区满就换一块4倍大的存储区。但如果此时的表已经很大(目前的阀值为50000),则改变策略,采用加一倍的方法。引入这种改变策略的方式,是为了避免出现过多空闲的存储位置。

顺序表的操作

增加元素

如图所示,为顺序表增加新元素111的三种方式

1740102-20190914140603324-1847317526.png

a. 尾端加入元素,时间复杂度为O(1)

b. 非保序的加入元素(不常见),时间复杂度为O(1)

c. 保序的元素加入,时间复杂度为O(n)

删除元素

1740102-20190914140624164-821735989.png

a. 删除表尾元素,时间复杂度为O(1)

b. 非保序的元素删除(不常见),时间复杂度为O(1)

c. 保序的元素删除,时间复杂度为O(n)

链表

为什么需要链表

顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时又需要进行数据的搬迁,所以使用起来并不是很灵活。

链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。

链表的定义

链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是不像顺序表一样连续存储数据,而是在每一个节点(数据存储单元)里存放下一个节点的位置信息(即地址)。

1740102-20190914140403098-867159239.png

链表与顺序表的对比

链表失去了顺序表随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大,但对存储空间的使用要相对灵活。

链表与顺序表的各种操作复杂度如下所示:

操作链表顺序表

访问元素

O(n)

O(1)

在头部插入/删除

O(1)

O(n)

在尾部插入/删除

O(n)

O(1)

在中间插入/删除

O(n)

O(n)

注意虽然表面看起来复杂度都是 O(n),但是链表和顺序表在插入和删除时进行的是完全不同的操作。链表的主要耗时操作是遍历查找,删除和插入操作本身的复杂度是O(1)。顺序表查找很快,主要耗时的操作是拷贝覆盖。因为除了目标元素在尾部的特殊情况,顺序表进行插入和删除时需要对操作点之后的所有元素进行前后移位操作,只能通过拷贝和覆盖的方法进行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/552017.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js for foreach 快慢_js基本搜索算法实现与170万条数据下的性能测试

前言今天让我们来继续聊一聊js算法,通过接下来的讲解,我们可以了解到搜索算法的基本实现以及各种实现方法的性能,进而发现for循环,forEach,While的性能差异,我们还会了解到如何通过web worker做算法分片&am…

iterm php,iTerm2笔记

本文是 iTerm2 的使用笔记,不定期更新。1 注释说明对于 Preferences 的修改,> 表示需要切换选项卡,-> 表示在同一选项卡内2 参考3 杂301 如何随时随地一键调用 Quake-like iTerm2首先声明:由于 Mac OS 本身对窗体「最大化」…

matlab emd功率谱密度,【脑电信号分类】脑电信号提取PSD功率谱密度特征

脑电信号是一种非平稳的随机信号,一般而言随机信号的持续时间是无限长的,因此随机信号的总能量是无限的,而随机过程的任意一个样本函数都不满足绝对可积条件,所以其傅里叶变换不存在。不过,尽管随机信号的总能量是无限…

组装服务器配置清单_2020年组装电脑配置清单列表

随着电脑技术的不断革新,越来越多的家庭都有各式各样的电子设备。而电脑现在基本上是家家都有的物品,可是在购买电脑的时候新手小白需要注意那些事项呢?今天我们就给告诉小白如何组装电脑以小白组装电脑配置清单。1、购买电脑,您首…

oracle 关于归档的视图,oracle 与归档日志相关的几个视图

归档日志占据的数据库举足轻重的位置,以下系统视图来了解归档日志情况V$ARCHIVEV$ARCHIVED_LOG 已归档日志详单V$ARCHIVE_GAP 归档日志丢失V$ARCHIVE_PROCESSES 归档进程信息V$ARCHIVE_DEST 查看备份路径情况V$ARCHIVE_DEST_STATUSv$recovery_f…

count数据库优化oracle,迷惑性SQL性能问题排查与优化

:数据科学、人工智能从业者的在线大学。数据科学(Python/R/Julia)数据分析、机器学习、深度学习作者简介戴秋龙,拥有超过八年的电信、保险、税务行业核心系统ORACLE数据库优化,优化经验,具备丰富的行业服务背景。对Oracle数据库有…

swiper.js pagination指示点不变_电缆故障点的四种实用测定方法

一、电缆故障的种类与判断无论是高压电缆或低压电缆,在施工安装、运行过程中经常因短路、过负荷运行、绝缘老化或外力作用等原因造成故障。电缆故障可概括为接地、短路、断线三类,其故障类型主要有以下几方面:①三芯电缆一芯或两芯接地。②二…

wampserver php扩展openssl 不可用_PHP基础及WAMP集成基础

PHP语言编写的基础框架 PHP语言的编写框架与HTML5的一致&#xff0c;都是一下框架&#xff1a;<!DOCTYPE html> <html><head></head><body> </body> </html>PHP的主要表达语句在body里面&#xff0c;主题内容在<?p ?>标签中…

python expect模块_Python尚学堂高淇|第二季0408P119P123with上常见的异常的解决tryexcept...else结构,...

P119 04&#xff1a;try ...except...else结构try..except...else结构增加了"else快"如果try快当中没有抛出异常&#xff0c;则执行else快&#xff0c;如果try快当中抛出异常&#xff0c;则执行except快&#xff0c;不执行【实例】try....except...else结构执行测试…

用c语言简单办法做一个字典_幼儿园手工,用废纸筒做一个简单的小蝴蝶,有教程...

幼儿园的手工&#xff0c;除了用卡纸做各种简单的小制作外&#xff0c;纸筒也是常用的手工材料。下面用纸筒做一个简单的小蝴蝶&#xff0c;做法很简单。制作过程&#xff1a;准备材料废纸筒、剪刀、胶、水彩笔&#xff0c;纸板。在纸筒上剪下五个圈圈剪完的样子见下图把里面粘…

bing搜索引擎入口_互联网流量入口——头条的搜索计划

互联网时代&#xff0c;谁掌控了用户流量&#xff0c;那它就基本上胜出了一半&#xff1a;只有大量的用户和海量的数据才是信息化时代的主要要素。这些大数据信息和火热的深度学习算法的结合&#xff0c;能够催生无数的应用场景&#xff0c;通过不断的扩展和调整业务来保证自身…

python图形化编程工具哪个好_mPython(图形化编程软件) V0.5.0 官方版

mPython 是一款针对Python 3编程语言的图形化编辑工具。支持函数&#xff0c;仿真、hex、python、blockly三种代码读写等功能。并可以与TPYBoard系类开发板配合使用&#xff0c;直接连接PC端进行编程。【功能特点】 1、不依赖网络&#xff0c;可离线安装使用 2、支持hex、pytho…

linux更新系统内核,如何更新Linux内核来提升系统性能?

Linux内核的开发速度是前所未有的&#xff0c;大概每二三个月就会有一个新的主要版本发布。每次发布都带来了几项新的功能和改进&#xff0c;许多人可以充分利用它们&#xff0c;让计算体验更快、更高效或者有其他方面的提升。可问题是&#xff0c;你通常无法充分利用这些刚发布…

php对接V免签支付教程_【全网首发】最新版影视小程序搭建教程完整版

大家好&#xff0c;这里是深海网络&#xff0c;今天给大家讲解一下新版影视小程序搭建。  首先给大家看一下新版影视小程序是什么样子的&#xff0c;它有黑夜和白天两种观影模式&#xff0c;而且搜索精准&#xff0c;播放速度快。01第一步&#xff0c;开始正式搭建。新版区小…

linux编译代码命令,Linux下使用GCC命令编译代码

Linux下初学时最好从命令行入手&#xff0c;这样可以熟悉从编写程序、编译、调试和执行的整个过程。编写程序可以用vi/vim(个人觉得vim比vi好用)或其它编辑器编写。编译则使用gcc命令。要往下学习首先就得熟悉gcc命令的用法。gcc命令提供了非常多的命令选项&#xff0c;但并不是…

简要描述内部连接和外部连接之间的区别_sqlserver的几种常见连接方法

感谢本文几种描述方法&#xff0c;让我解决了最近的一段时间的疑问&#xff0c;转载下来&#xff0c;以供后面查血使用。本文链接&#xff1a;https://blog.csdn.net/huanghanqian/article/details/52847835四种join的区别已老生常谈&#xff1a;INNER JOIN(也可简写为JOIN): 如…

有两个python怎么停用其中一_python3.X 复学(2)-----开始了就不要停止

生命就是一种旅行&#xff0c;开始了就不要停止&#xff0c;无非就是眼前的苟且还有以后的苟且&#xff0c;只要还有一口气 ----------hashlinux 因为Python是跨平台的&#xff0c;它可以运行在Windows、Mac和各种Linux/Unix系统上。在Windows上写Python程序&#xff0c;放到Li…

react项目中的参数解构_一天入门React学习心得

一天入门React学习心得阅读前必读本文写的仓促&#xff0c;算是一个学习笔记吧&#xff0c;算是一个入门级的学习文章。如果你刚刚入门&#xff0c;那么可能一些入门的视频可能更加适合你。但如果具备一些知识&#xff0c;比如Vue&#xff0c;那么视频就不适合了。建议看完本篇…

python random函数_详细代码实战讲解:如何用 Python让自己变成天选之子

今天为大家带来的内容是&#xff1a;详细代码讲解&#xff1a;如何用 Python让自己变成天选之子话不多说直接上代码&#xff1a;请大家猜一猜下面这段代码的运行效果&#xff1a;你是不是以为这段代码运行以后&#xff0c;结果如下图所示&#xff1f;但实际上&#xff0c;我可以…

安卓图标_干货 | 安卓界面系统规范

众所周知&#xff0c;安卓系统是开源的&#xff0c;国内又有超多的手机厂商&#xff0c;小米、魅族、华为、oppo、三星等&#xff0c;每一个品牌有属于自己的UI设计规范&#xff0c;但是我们主要分析UI界面尺寸规范。1、字体安卓系统中文采用的是思源黑体&#xff0c;英文字体为…