【线性表】(List)

[b][size=large]本文围绕以下三个部分展开: [/size][/b]

[b][size=large]一、线性表(List)[/size][/b]
[b][size=large]二、顺序存储结构[/size][/b]
[b][size=large]三、链式存储结构[/size][/b]


[b][size=large]一、线性表(List)[/size][/b]

[size=medium][b]1. 概念[/b][/size]

[size=medium]线性表:0个或多个数据元素的有限序列。(像线一样性质的表)[/size]

[size=medium]线性表的每个数据元素的类型都是相同的。[/size]

[size=medium]A. 是一个序列。(元素之间是有顺序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他每个元素都有且只有一个前驱和后继。)[/size]

[size=medium]B. 元素个数是有限的。[/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/3542/78b65ec5-ddb5-32a4-82ce-96c6fc287daf.png[/img][/align]

[size=medium][b]类比:[color=red]幼儿园小朋友按次序排队。[/color][/b][/size]


[size=medium][b]2. 线性表的抽象数据类型[/b][/size]

[size=medium][b](1)[/b]基本操作:[/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/3547/01651319-5ebd-3c74-a633-43d6395f63f0.png[/img][/align]

[size=medium]抽象数据类型定义如下:[/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/3549/92e68d66-8835-34d3-a5f7-2196ff79acf2.png[/img][/align]
[align=center][img]http://dl2.iteye.com/upload/attachment/0111/3551/8d23b02a-bc6c-37c2-babe-a7fe886772bb.png[/img][/align]

[size=medium][b](2)[/b]复杂的个性化操作[/size]

[size=medium][b]例题:union操作(实现两个线性表集合A和B的并集操作)[/b][/size]

[size=medium][b]思想:[/b]把存在在集合B中但不存在在A中的数据元素插入到A中即可。即:循环集合B中的每个元素,判断当前元素是否存在A中。若不存在,则插入到A中即可。[/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/3553/87eaba05-cd63-35b8-924a-2f538f1c08b3.png[/img][/align]


[b][size=large]二、顺序存储结构[/size][/b]

[size=medium][b]1. 顺序存储[/b][/size]

[size=medium]指用一段地址连续的存储单元依次存储线性表的数据元素。[/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/3570/b8f02146-d4f5-332b-bc34-db05a182fe8b.png[/img][/align]


[size=medium][b]2. 顺序存储方式[/b][/size]

[size=medium]在内存中找了块地儿,通过占位符的形式,把一定内存空间给占了,然后把[b]相同数据类型[/b]的数据元素依次存放在这块空地中。[/size]

[size=medium]使用[b]一维数组[/b]来实现顺序存储结构。即:把第一个数据元素存到数组下标为0的位置中,接着把线性表相邻的元素存储在数组中相邻的位置。[/size]


[size=medium][b]3. 顺序存储结构代码和三个属性[/b][/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/3572/2f37fcb8-0cdc-3d31-9b0b-aac6a09395a0.png[/img][/align]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/3574/644b93b9-f924-3f19-84a6-0594c9a0437e.png[/img][/align]


[size=medium][b]4. 地址计算方法[/b][/size]

[size=medium]存储器中每个存储单元都有自己的编号,称为地址。[/size]

[size=medium][b](1)[/b]数据元素的序号和存放它的数组下标之间的对应关系:[/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/3576/050291ad-6ef5-3408-91f7-377660d4a86e.png[/img][/align]

[size=medium][b](2)[/b]假设一个数据元素占c个存储单元,则第i+1个数据元素的存储位置和第i个数据元素的存储位置的关系:[/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/3578/16edf76e-e683-3293-a2fe-b58165fc5cf5.png[/img][/align]

[size=medium]第i个数据元素的存储位置和第1个数据元素的存储位置的关系:[/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/3580/45ec8b17-8f92-30e4-8252-ffceffc9d2f7.png[/img][/align]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/3582/63df7ff2-4f7e-3dcb-bcfd-38179c48a4c6.png[/img][/align]

[size=medium][b](3)随机存取结构:[/b]可以随时算出线性表中任意位置的地址,存取时间复杂度均为O(1),具有这样特点的存取结构称为随机存取结构。[/size]


[size=medium][b]5. 获得元素的操作(GetElem):将线性表L中第i个位置元素值返回。[/b][/size]

[align=left][img]http://dl2.iteye.com/upload/attachment/0111/3584/25336eb0-63a5-3c7b-9419-06e1b0690472.png[/img][/align]
[align=left][img]http://dl2.iteye.com/upload/attachment/0111/3586/54595981-cb5f-3f66-967b-37ed756dbebd.png[/img][/align]


[size=medium][b]6. 插入某个数据元素[/b][/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/3588/c000992b-89ec-3585-8cd5-4e1201ae3ded.png[/img][/align]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/3590/49877362-3ac2-3c60-8c87-e342a7a4ba3a.png[/img][/align]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/3592/f3cf2682-4464-3cc6-978a-46a0b138446b.png[/img][/align]


[size=medium][b]7. 删除某个数据元素[/b][/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/3600/da514d4b-2029-31da-a286-53beaf0bbe3d.png[/img][/align]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/3598/afe667dc-9541-3886-8afb-9bb97c5a35e8.png[/img][/align]

[img]http://dl2.iteye.com/upload/attachment/0111/3594/90ae21c9-7498-3ab2-bb3c-e9e0bd5250d5.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0111/3596/889c0062-ac15-3c43-9ed9-76fd362cfc60.png[/img]


[size=medium][b]8. 优缺点[/b][/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/3602/22748765-23bf-31d3-a3df-f511b7442ab6.png[/img][/align]


[b][size=large]三、链式存储结构[/size][/b]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/3604/bb06b9f1-45fd-35ee-b134-3a829ea7442d.png[/img][/align]

[size=medium][b]1. 特点:[/b][/size]

[size=medium]用一组任意的存储单元存储线性表的数据元素。这组存储单元可以连续,也可以不连续。意味着,这些数据元素可以存放在内存中未被占用的任意位置。[/size]


[size=medium][b]2. 数据域、指针域、指针/链、结点[/b][/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/3606/4aae5091-d601-341f-87e5-0a85e2f068ec.png[/img][/align]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/3608/5c3a400c-abcf-33de-bf5e-7dfd89eea9f9.png[/img][/align]


[size=medium][b]3. 头结点、头指针[/b][/size]

[size=medium](1)[b]头指针[/b]:链表中第一个结点的存储位置。[/size]

[size=medium]链表最后一个结点的指针为空(NULL/"^")[/size]

[size=medium](2)[b]头结点[/b]:为了更方便地对链表进行操作,在单链表的第一个结点前附设的一个结点。[/size]

[size=medium]数据域可以不存储任何信息,也可以存储如线性表长度等附加信息。[/size]

[size=medium]指针域存储指向第一个结点的指针。[/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/3610/67db9739-ba1f-341a-ae64-5d3fb57da3a4.png[/img][/align]

[size=medium][b](3)二者的异同[/b][/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/3612/ff751d5a-27a2-3343-a2e2-60cc28b2d40d.png[/img][/align]


[size=medium][b]4. 分类[/b][/size]

[size=medium]链式存储结构又有不同形式,分为:单链表、静态链表、循环链表和双向链表。[/size]


[size=large]整理时重点参考:[color=red]《大话数据结构》程杰著[/color][/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值