04_线性表_顺序表


1、线性表简介

在程序中,经常需要将一组(通常是同为某个类型的)数据元素作为整体管理和使用。最简单的解决方案便是将这样一组元素看成一个序列,用元素在序列里的位置和顺序,表示实际应用中的某种有意义的信息,或者表示数据之间的某种关系。我们将其抽象为线性表。

根据线性表的实际存储方式,分为两种实现模型:

  • 顺序表,将元素顺序地存放在一块连续的存储区里,元素间的顺序关系由它们的存储顺序自然表示。
  • 链表,将元素存放在通过链接构造起来的一系列存储块中。

2、顺序表怎样存储

下面我们将着重于顺序表。
还记的上一节的内存吗?
顺序表,作为一种存储结构,他需要在内存中申请空间进行存储,而它的特点就是必须要连续存储,也就是要拿出连号的‘柜子’进行存储,那么虽然内存有很多存储空间,但在其连续的空间内,可能有局部内存已经被其他东西占用,

0x03 0x04 XXXX
0x06 0x07 0x08
XXXX 0x10 0x11

假设我们拿出了03、04两个柜子进行存储,但是我们现在需要三个柜子来存储,而05的位置已经被占用,这时候,我们就要吧03、04柜子里的东西重新拿出来,再找一个三个连续的柜子放进去,比如06~08的位置,此时,如果我们又要存储别的东西,就又要重新找满足要求的连续的“柜子”。这就是顺序表的存储特性,不过为了避免经常“搬迁”,采用一中策略:提前开辟更多的位置来等待你存储,如果满了,那么就再去新开辟二倍的空间,满了再二倍,当然也会有个界限,否则就造成空间浪费了。


3、从0开始
0x03 1 0x04 2
0x05 3 0x06 4

li = [1, 2, 3, 4]
假设我们在一块连续的位置存储了数组li,那么取li[0]的时候, 就是先找到li所在的地址Ox03, 然后从这个地址读取4个字节(因为是整型), 如果是取li[3], 也是先找到li所在的地址Ox03,再往后跳过三个数据类型字节的位置, li[3] = Ox03 + 3*4Btye所以li[0]的**0 **的意思就是偏移量,所以数据是从零开始。


4、元素外置的顺序表

上面介绍的是基本的顺序表,就是存储的空间里都是类型相同的数据,那么你可能会问了,明明在Python中数组里存储的可以是任何类型的数据。这时候,我们就要寄出元素外置的顺序表了,这是个什么意思呢?其实这种存储不同类型数据的数组,其本身并没有把那些数据存储在自己的空间里,而是把这些数据对应的地址存在了自己的空间里,这样自己空间里还是类型一致的数据。

假如还是上面的那块地址,

0x03 0x10 0x04 0x31
0x05 0x52 0x06 0x43

这次在这里存储的是四个内存地址,而这些地址又对应相应的数据。

0x10 ‘abb’ 0x31 233
0x52 {1, 2} 0x43 {'ha':'ho'}

这时候我们在访问li[0]的时候将进行已下操作:
首先找到li所对应的地址Ox03, 再通过这个地址存储的地址Ox10 找到数据'abb', 这种存储地址的地址空间连续称作数据外置表, 可以通过列表存储不同类型的数据。


5、顺序表的实现

这里Python已经内置,但我们来考虑自己如何实现顺序表。

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

除了需要数据部分, 还需要表头信息用来存储表的大小以及已存储数据量。
a> 一体式结构:把表头信息和数据区连续存储
b> 分离式结构:把表的大小与已存储量以及存储地址放到一个地方, 地址指向另一块存储位置

优劣问题,数据存储问题:

连续: 读取方便, 当存储数据超过预先支配的大小, 那就需要重新申请一块连续空间, 进行数据搬迁, 释放老的空间, 表头也需要改变, 起始地址就会改变。

分离: 间接读取,当存储数据超过预先支配的大小, 只需要改变存储的地址, 并不需要改变表头的位置。

当存储空间不足的时候,扩充带来的问题: 扩充预留多少大小。
下面有两种解决策略。
两种策略:
1> 每次申请扩充固定数目的位置, 每次都扩充10个空间,
特点: 节省空间, 但是扩充操作频繁, 操作次数多
2> 每次申请都扩充倍数, 4->8->16->32
特点: 空间换取时间

允许扩充的顺序表叫做动态顺序表, 位置不够了可以取扩充位置


6、顺序表操作:

增加元素:

a>表尾端加入元素
b>非保序的元素插入
c>保序的元素插入

a>O(1)
b>直接把需求位置的数据放到尾端, 再把数据放入改位置,不常见, O(1)
c>O(n), 需要把所有数据往后移一位, 才能在空位加入元素

删除元素:
a>删除表尾元素 O(1)
b>非保序元素删除 O(1) 删除元素, 把末尾填入空位
c>保序删除 O(n) 删除元素在把每位上移


7、Python中的顺序表:list和tuple

a>按下表位置索引:复杂度O(1)
b>允许加入任意元素, 表对象标识(id地址)不变:表头和数据区分离式存储
c>可以存储不同类型的数据:元素外置方式

扩充策略:
建立空表(或很小的表), 系统分配一块能容纳8个元素的存储区, 进行插入时, 如果存储器满了, 存储区就换一块4倍大的存储区, 但是此时表已经很大(阀值50000),则改变策略,采用加一倍的方法, 避免出现过多的空闲位置


小结

1、顺序表属于线性表的一种。
2、从0开始。
3、存储同样类型的数据。不同数据是如何存储的?
4、怎么构造的?都有什么优劣?
5、添加和删除元素的复杂度?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,862评论 2 89
  • 在一生当中,我们会经历很多波折,在期间有很多让人感动的力量时刻在催促我们不停向前。去年在接上幼儿园儿子回家时就让我...
    高天明月55阅读 181评论 1 1
  • 你说你跋山涉水只为见我。 你躲避了暴风雨,看过了太多尘世繁华,历经了春夏秋冬。 你觉得我是这世上唯一的美好,其实你...
    珂先生啊喂阅读 279评论 0 3
  • 乡间有田雨,今生有余欢。 繁华(huā)秋第时,娘子欲还(huán)家。
    伯文阅读 245评论 0 1