顺序表内存本质/Python_list实现

本文探讨了顺序表的内存管理机制,包括元素内嵌与外置的两种存储方式,并介绍了Python中list的动态扩容策略,如初始分配8个元素的空间及后续的四倍和两倍扩容策略。

顺序表内存本质/Python_list实现

顺序表与元素外置顺序表

  • 顺序表
    • 元素在内存即物理地址上顺序存储,每个元素占有存储单元大小相同且固定,地址查询:Loc(ei)=Loc(e0)+c*i,c为存储单元大小
  • 元素外置顺序表
    • 实际元素另行存储,顺序表中保存其地址链接(类似指针),此处的c为存链接所需存储在这里插入图片描述

顺序表的两种实现方式

  • 一体式结构
    • 整体性强,易于管理;顺序表创建后元素储存区固定
  • 分离式结构
    • 表对象只有容量与元素个数的信息,实际元素通过链接与基本表对象关联

在这里插入图片描述

长度变更时分配新的内存,释放原内存

  • 一体式结构
    • 连着表头重新分配
  • 分离式结构
    • 只变更表对象的物理存储,表头位置不变在这里插入图片描述

元素储存区扩充策略

  • 增加固定储存位置;线性增长,节省空间,但操作次数多
  • 翻倍扩充;减少操作次数,但浪费空间资源

Python中的顺序表

Python中的list和tuple是采取分离式技术实现的动态顺序表,其中tuple为不可变的顺序表;增删操作中,尾部增删时间复杂度O(1),其余O(n)

list

Python官方实现中,建立空表(或超小表),系统分配一块能容纳8个元素的储存区,执行insert或append时,原先储存区满就换一块4倍大的储存区,若表已经很大(超出阈值50000),改变策略为加一倍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值