数据结构学习第二天---基本数据结构--顺序表(外置、内置、一体式、分离式)

1、基本顺序表与元素外置的顺序表

   一组数据相同类型的最直观的的存储:我们就按照顺序靠在一起! 这就是我们的顺序表。是指使用一组地址连续的存储单元依次存储数据元素的线性结构

 

自我总结话述:

第一个问题:为什么下标是从0开始的呢?
 答:0这些下标代表的是偏移量,并非是这个数据对应的位置,当我们要查找   0下标的这个元素  的时候,代表的意思是我们不进行偏移直接查找,就是查找第一个元素。当我们查询  下标为3   的元素的时候,意思是我们要查找偏移了三个位置的数据,就是跳过前三个查找第四个元素。

第二个问题:基本的顺序表外置的顺序表的区别是什么呢??
 答:对于一个简单的列表或者是数组,都是存储的相同类型的元素。就比如一个数字数组吧,List = [1,2,3,4,5] ,像是这样的,每一个数字在内存中占的大小都是相等的,就比如list[0] 的地址值是0X23,那么list[1]的地址值就是0X27  , 一个数字占4Byte,为了节省空间,我们在内存中是通过一个顺序表来顺序的存储这些数值的!就像上图的存储方式一样,这就是基本的顺序表:在内存中存储相同类型的连续的表就是基本顺序表
那么什么是外置顺序表呢?在我们的Python中,我们的列表是很强大的,可以存储不同的类型,比如Plist=[123,‘vincent’ ,{‘name’:‘tom’}]  像这样的完全是可以存储的。那么这个时候,不同的数据类型,在内存中的大小就不一样了,这样就没有办法去使用基本的顺序表进行存储了,但是我们发现,这些不同类型的值在内存中存储的时候,地址值所占的内存的大小是相同的,所以我们采用一个顺序表将这些不同数据类型的地址值进行存储,然后进行查询地址,找真正的数据,这就是外置顺序表

2、顺序表的结构--一体式与分离式

1、顺序表由我们的数据区和我们的表头信息来组成,表头信息就是我们申请的多大的空间。数据区存储的是我们的数据。当进行数据的查询的时候,跳过表头信息知己查找数据。

顺序表还有两种构建形式:一体式构建和分离式构建

两者的区别:
     一体式结构:整体强,易于管理,但是由于数据区就是表对象的一部分,顺序表创建后,元素区就固定了
     分离式结构:表对象里只保存与整个表有关的信息(也就是表头:即容量和元素个数),实际数据元素存放在另外的独立的空间中,通过链接与基本表对象关联。

想像一下:当我们对一个已经存在的列表进行扩充的时候。这个时候内部运行的步骤是什呢?
      当我们申请的空间不够的时候!我们只能采用重新去申请的方式进行存储数据。然后将数据搬迁到新的空间中,然后将老的空间进行释放。在数据搬迁的时候存在一个问题:当我们采用一体式结构的时候,需要将我们的表头一起搬迁过来,但是如果我们采用分离式的时候,我们只需要将链接修改到新的空间存储即可。这是最直观的表现。
     还有一个重要的原因,当我们采用一体式的时候重新迁移的表头的 li (指向列表的第一个地址值)也会改变,但是当我们采用分离式的时候,这个时候表头li的地址值是不会发生改变的! 通常我们采用的是分离式的存储。

图中间是一体式!图右边是分离式!图左边是新申请的空间。

3、顺序表数据区替换与扩充

就像上图! 原本存储的是    li = [200,390,78,191] ,但是我们最后又存储了一个500,我们需要扩充去存储我们的新数据,那么我们在申请新的空间的时候到底要扩充多大的呢!?我们需要申请刚好的呢?还是多申请一些呢?   

这设计到申请的策略问题!到底要预留多大的呢?有两种策略:

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

4、顺序表添加与删除元素 Python列表的实现

1、增加元素:(三种方式)


 

   a、在表尾插入元素 ,时间复杂度为O(1)
   b、非保序的元素插入,时间复杂度为O(1)
   c、保序元素的插入,时间复杂度为O(n)

2、删除元素:


 

   a、删除表尾元素 ,时间复杂度为O(1)
   b、非保序的元素删除,时间复杂度为O(1)
   c、保序元素的删除,时间复杂度为O(n)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值