Day 15:顺序表,链表

2020/09/22

顺序表基本形式

其实就是按照顺序储存同一种数据的
我们存储一个纯数字列表的时候,存储了列表第一个元素在内存中的初始位置,当我们要按照下标去取数据的时候,因为数据在内存中是连续存储的,假设存储的第一个数据是0x01,那么第二个数据就是 0x0(1+4),第三个数据是 0x0(1+4*2),即按照数据的下标进行数据偏移即可;
在这里插入图片描述
如果储存的不是同一种数据时
就需要用元素外置,元素外置 其实就是把元素们存储在没有顺序的内存块里。把他们每个内存块的地址来进行顺序表方法。这样电脑也就根据每个顺序表来引入不同的元素
在这里插入图片描述

顺序表的结构

顺序表会有 表头信息数据区两个部分组成。
在这里插入图片描述

表头信息 有两个元素, 现有元素个数和申请的内存的元素个数(容量)
数据区 就是 储存的数据有哪些。

一体式结构

在这里插入图片描述

就是把表头信息和数据区存储在一起,是按照顺序表来存储的。
优点就是可以直接访问
缺点就是 在扩充的时候,整体全部删移到新的顺序表 == 替换

分离式结构

在这里插入图片描述
表头会有3个数据,第三个数据指向元素存储区的第一个。
缺点就是 要间接访问,多一个数据
优点: 方便动态的修改。如果要添加数据存储区的数据,只需要把表头第3个数据修改就可以了。 数据区可以扩充的话 就叫做动态顺序表

扩充的两种策略

1.每次扩充增加固定数目的存储位置,如每次扩充增加10个元素位置,这种策略可称为线性增长。
特点:节省空间,但是扩充操作频繁,操作次数多。
2.每次扩充容量加倍,如每次扩充增加一倍存储空间。
特点:减少了扩充操作的执行次数,但可能会浪费空间资源。以空间换时间,推荐的方式。

增加元素

如图所示,为顺序表增加新元素111的三种方式
在这里插入图片描述

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

删除元素

在这里插入图片描述
a. 删除表尾元素,时间复杂度为O(1)
b. 非保序的元素删除(不常见),时间复杂度为O(1)
c. 保序的元素删除,时间复杂度为O(n)

python list和tuple的原理

Python中的list和tuple两种类型采用了顺序表的实现技术,具有前面讨论的顺序表的所有性质。
tuple是不可变类型,即不变的顺序表,因此不支持改变其内部状态的任何操作,而其他方面,则与list的性质类似。

list的基本实现技术
Python中list采用的是分离式顺序表元素外置的存储结构;动态顺序表;开始分配8个元素的存储区,前期采用四倍扩充,超过5000采用一倍扩充 为了避免过多的空闲

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值