顺序表的基本布局+元素外置的顺序表+顺序表的结构和实现(一体式和分离式)+元素存储替换和扩充+增删元素的时间复杂度+python中的顺序表——list基本实现技术

数据结构第二天,完成啦!QAQ,开心!


目录

 

1、顺序表

(1)顺序表的基本布局

(2)元素外置的顺序表

2、顺序表的结构和实现

(1)顺序表的结构

(2)顺序表的两种基本实现方式

<1>一体式:为了保证顺序结构,表头也需要申请新的地址

<2>分离式:表头内容和地址不需要变化,只需要改变存储地址的指向即可

3、元素存储替换和元素存储扩充

4、增加元素

5、删除元素

6、Python中的顺序表

List基本实现技术


1、顺序表

内存是以一个字节为索引单位的,一个字节是八位的,一个字节有一个地址;一个整型存放的时候需要4个字节;字符串中的一个字符要占一个字节

存储整数型数值1时,要转换为二进制形式存放,如下图所示

如果有一个列表li = [7, 21, 39],存储情况如下(当存储的数据类型相同时,采用的是顺序表的基本布局形式):

(1)顺序表的基本布局

在列表中进行查找的话,锁定第一个元素的初试位置,在偏移量处直接找到访问的元素

(2)元素外置的顺序表

列表里用来存储不同数据类型的数据,每个数据所占用的字节不同,所以存储的是数据对象的地址,一个地址是一个整型数据,所以占用4个字节。

2、顺序表的结构和实现

(1)顺序表的结构

一般来说顺序表有表头信息和数据区两个内容,表头里面包括容量和现有元素个数。因为一开始要存储多少个数据是未知的,但是如果容量比实际存储的元素少,那么最后添加的内容跟之前的内容就不一定连续了。一开始要对存储容量进行一个预估

(2)顺序表的两种基本实现方式

当增加到5个元素时,由于之前申请的空间不够,所以只好重新申请一个空间来使用

<1>一体式:为了保证顺序结构,表头也需要申请新的地址

<2>分离式:表头内容和地址不需要变化,只需要改变存储地址的指向即可

3、元素存储替换和元素存储扩充

在列表元素增加到超出列表容量的时候,我们直接对存储地址进行了替换。

存储地址替换的同时,也要对列表容量进行扩充,进行扩充有两种策略:

1、每次扩充增加固定数目的存储位置,如每次扩充增加10个元素位置;相对节省空间,但是扩充操作频繁,操作次数多

2、每次扩充容量加倍,用空间换时间,减少了扩充操作的执行次数,但可能会比较浪费空间资源

4、增加元素

对于三种情况来说,a)方法的时间复杂度为O(1);b)方法的时间复杂度为O(1);c)方法的时间复杂度为O(n)

5、删除元素

A)方法的时间复杂度为O(1);

B)方法的时间复杂度为O(1);

C)方法的时间复杂度为O(n)

6、Python中的顺序表

Python中的list和tuple两种类型采用了顺序表的实现技术,具有前面讨论的顺序表的所有性质,tuple是不可变类型,是不变的顺序表,其他方面跟list性质类似

List基本实现技术

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

2、允许任意加入元素,而且在不断加入元素的过程中,表对象的标识不变——用分离式结构进行存储的。

3、由于列表中存储的数据类型可以不一致,所以其采用的存储方式是元素外置型,直接储存元素的地址

4、数据存储区是动态变化的,当存储区满时,可以申请新的存储区进行扩充,这种顺序表称为动态顺序表。List是动态顺序表,python中的list在建立空表时,系统会给8个元素——4个字节,一个整型的存储区(因为不管存储的数据有多大,是什么类型,在存储的时候,都是存储地址,地址一般是整型数据,也就是4个字节);在进行存储区扩充的时候, 元素区满就换一个4倍大的存储区,当达到50000(阀值)的时候,就扩大一倍,这是为了避免出现过多空闲的存储位置。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值