Python数据结构与算法——顺序表

  • 时间:
  • 浏览:1
  • 来源:彩神幸运飞艇_神彩幸运飞艇官方

顺序表:将元素顺序地存中放一块连续的存储区里,元素间的顺序关系由它们的存储顺序自然表示

在Python的官方实现中,list实现采用了下面的策略,在建立空表时,系统分配一块能容纳8个元素的存储区;在执行插入操作(insert和append)时,肯能元素存储区满就换一块4倍大的存储区。但肯能此时的表肯能很大(目前的阈值为3000000),则改变策略,采用加一倍的法律土办法。引入你你是什么 改变策略的法律土办法是为了避免出现过多空闲的存储位置。

基于下标(位置) 的高效元素访问和更新,时间错综复杂度是O(1); 为满足该底部形态,应该采用顺序表技术,表中元素保地处一块连续的存储区中。

5_内存.png

在进程池池中,总是还都可以 将一组(通常为同一一个多类型的)数据元素作为整体管理和使用,还都可以 创建你你是什么 元素组,用变量记录它们,传进传出函数等(这类,Python中的列表)。一组数据中中有 的元素个数肯能地处变化(还都可以 增加肯能删除元素)。

采用分离式底部形态的顺序表,若将数据区更换为存储空间更大的区域,则还都可以 在不改变表对象的前提下对其数据存储区进行了扩充,所有使用你你是什么 表的地方有的是必修改。假若进程池池的运行环境还有空闲存储,你你是什么 表底部形态就不让肯能满了而原困操作无法进行。此种顺序表被称为动态顺序表,肯能其容量还都可以 在使用中动态变化。

6_顺序表思维导图.png

1_note_shunxubiao.png

作者:techLee

人个博客地址:www.limiao.tech

分离式底部形态,表对象里只保存与整个表有关的信息(容量个元素个数),实际数据元素存中放那我独立的元素存储区里,通过链接与基本表对象关联。

肯能元素的大小不统一,则须采用元素外置的形式,将实际数据元素另行存储,而顺序表中各单元位置保存对应元素的地址信息(即链接)。肯能每个链接所需的存储量相同,通过上述公式,还都可以 计算出元素链接的存储位置,而后顺着链接找到实际存储的数据元素。此时公式中的 c 则不再是数据元素大小,全都存储一一个多链接地址所需的存储量。

分离式底部形态我应该 更换数据区,只还都可以 将表信息区中的数据区链接地址更新即可,而该顺序表对象不变。

表头信息即:上图中上方的每段

每次扩充容量加倍,如每次扩充增加一倍存储空间。

下面每段为数据区 (连续的存储空间,内存的概念见上方的图解)

非保序的加入元素,其时间错综复杂度为O(1),肯能其会破坏顺序表原有的元素顺序,之后不常用

链表: 将元素存放再通过链接构造起来的一系列存储块中

构造一一个多数据表的刚刚,首比较慢预估数据还都可以 几次的空间,指明数据存储所需空间,即数据区。如上图中所示,即为8个数据。这样就要向计算机申请8个空间,在表头指明

思维导图

一一个多顺序表的全版信息包括两每段,一每段是表中的元素集合,另一每段是为实现正确操作而需记录的信息,即有关表的整体具体情况的信息,这每段信息主要包括元素存储去的容量和当前表中已有的元素个数两项。

每次扩充增加固定数目的存储位置,如每次扩充增加8个元素位置,你你是什么 策略称为线性增长

Python 标准类型list 全都你你是什么元素个数可变的线性表,还都可以 加入和删除元素,并在各种操作中维持已有元素的顺序(即保序),之后还具有以下行为底部形态:

扩充的你你是什么策略

特点: 减少了扩充操作的执行次数,但肯能会浪费空间资源。以空间换时间,推荐的法律土办法。

作图解释为下:

那我的一组序列元素的组织形式,即可抽象为线性表,一一个多线性表是某类元素的一一个多集合,还记录着元素之间的你你是什么顺序关系。线性表是最基本的数据底部形态之一。

全都访问指定元素时不让从头遍历,通过计算便可获得对应地址,其时间错综复杂度为O(1).

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

尾端加入元素,如图所示,直接在顺序表的元素末尾加上元素,其时间错综复杂度为O(1)

3_note_顺序表的你你是什么实现法律土办法一.png

根据线性表的实际存储法律土办法,分为你你是什么实现模型:

8_顺序表的操作_删除元素.png

7_顺序表的操作.png

重点总结:

删除表尾的元素,其时间错综复杂度为O(1)

数据元素你你是什么连续存储,每个元素所占的存储单元大小相同,元素的下标是其逻辑地址,而元素存储的物理地址(实际内存地址)还都可以 通过存储区的起始地址加上逻辑地址与存储单元大小的乘积计算而得

一体式底部形态肯能顺序表信息区与数据区连续存储在同时,全都我应该 更换数据区,就只有整体搬迁,即整个顺序表对象(存储顺序表的底部形态信息的区域)改变了。

保序的加入元素,如图所示,将增加的元素3000,中放索引为1的位置,则对应的许多元素则分别向后移动,此为保序,这样破坏增加元素刚刚的元素顺序,但因会让增加元素所在位置刚刚的元素都产生移动,其时间错综复杂度为O(n)

)

Python 中的list和tuple你你是什么类型采用了顺序表的实现技术

原创文章,转载请告知

非保序的元素删除,时间错综复杂度为O(1)

出了存储数据的数据区之外,往往总要加上表头信息

对于元素增全版查的需求,最简单的避免法律土办法全都将你你是什么 组元素当做一一个多序列,用元素序列里的位置和顺序,表示实际应用中的你你是什么有意义的信息,肯能表示数据之间的你你是什么关系。

即: L0c(i) = L0 + i * c

在Python的官方实现中,list全都你你是什么采用分离式技术实现的动态顺序表。之后,使用list.append()加入元素比在指定位置插入元素带宽高。

一体式底部形态,存储表信息的单元与元素存储区以连续的法律土办法安排在一块存储区里,两每段数据的整体形成一一个多全版的顺序表对象,你你是什么 底部形态整体性强,易于管理。

4_note_顺序表的你你是什么实现法律土办法二.png

2_note_顺序表的底部形态.png

内存:

肯能数据元素存储区域是表对象的一每段,顺序表创建后,元素存储区就固定了

允许任意加入元素,之后在不断加入元素的过程中,表对象的标识不变;为满足该底部形态,还都可以 能更换元素存储区,之后为保证更换存储区时list对象的标识不变,只有采用分离式实现技术。