大话数据结构-第3章 线性表

3. 线性表

3.1 线性表(List): 零个或多个数据元素的有限序列


3.2 线性表的定义

若将线性表记为(a1, ... ,ai-1, ai, ai+1, ... , an), 则表中 ai-1 领先于 ai, ai, 领先于 ai+1, 称ai-1是ai的直接前驱元素, ai+1 是 ai 的直接后继元素. 当 i=1, 2, ... , n-1 时, ai 有且仅有一个直接后继, 当 i=2, 3 , ... , n 时, ai 有且仅有一个直接前缀.
线性元素的个数 n (n>=0) 定义为线性表的长度, 当 n = 0 时, 称为空表


3.5 顺序存储结构的插入与删除

  • 线性表的顺序存储结构, 在存, 读 数据时, 时间复杂度是 O[1]
  • 插入, 删除时, 时间复杂度为 O[n]

线性表顺序存储结构的优缺点

  • 优点:
    • 无需为表示表中元素之间的逻辑关系而增加二外的存储空间
    • 可以快速的存取表中任一位置的元素
  • 缺点:
    • 插入和删除操作需要移动大量的元素
    • 当线性表长度变化较大时, 难以确定存储空间的容量
    • 造成存储空间的 "碎片"

链表

3.6 线性表的链式存储结构

链式结构中, 除了要存储数据元素信息外, 还要存储它的后继元素地址

为了表示每个元素ai与其直接后继数据元素ai+1之间的逻辑关系, 对数据元素ai来说, 除了存储本身的信息之外, 还需存储一个指示其直接后继的信息(即直接后继的存储位置). 我们把存储元素信息的域称为数据域, 把存储直接后继位置的域称为指针域. 指针域中存储的信息称为指针或者链. 这两部分信息组成数据元素ai的存储映像, 称为节点(Node)

n 个节点(ai的存储映像)链接成一个链表, 即 为线性表(a1,a2,...an)的链式结构, 因为此链表的每个节点中只包含有一个指针域, 所以叫做单链表.

链表中第一个节点的存储位置叫做头指针, 最后一个节点为空(NULL 或者 ^)

单链表的第一个节点前附加一个节点,称为头节点(不是必须的). 不存储任何信息, 指向第一个节点.


3.7 单链表的读取

工作指针后移, 一个一个顺序读取.


3.8 单链表的插入与删除

插入与删除的时间复杂度都是O[1], 对于插入和删除数据越频繁的操作, 单列表的效率优势就越是明显


3.9 单链表的整表创建

    1. 头插法:
    1. 尾插法:

3.10 单链表的整表删除

将链表中的所有元素依次删除


3.11 单链表结构与顺便存储结构优缺点

存储分配方式

  • 顺便存储结构用一段连续的存储单元依次存储线性表的数据元素
  • 单链表采用链式存储结构,用一组任意的存储单元存放线性表的元素

时间性能

  • 查找:
    • 顺序存储o(1)
    • 单链表o(n)
  • 插入和删除
    • 顺序存储结构需要平均移动表上一般的元素 时间为o(n)
    • 单链表在得到某位置的指针后, 插入和删除时间仅为o(1)

空间性能
- 顺序存储结构需要预分配存储空间, 分大了 浪费, 分小了, 容易发生上溢
- 单链表不需要分配存储空间, 只要有就可以分配, 元素个数也不受限制

结论:

  • 若线性表需要频繁查找, 很少进行插入和删除操作时, 宜采用顺序存储结构. 若需要频繁插入和删除时, 宜采用单链表结构
  • 当线性表中的元素个数变化较大或者根本不知道有多大时, 最好用单链表结构. 这样可以不需要考虑存储空间的大小问题. 而如果实现知道线性表的大致长度,如一年12个月, 一周就是星期一至星期天共七天, 用顺序存储结构效率会高很多

3.12 静态链表
优点: 在插入和删除操作时, 只需要修改游标, 不需要移动元素, 从而改进了在顺序存储结构中的插入和删除操作需要移动大量元素的缺点
缺点: 没有解决连续存储分配带来的表长难以确定的问题
失去了顺序存储结构随机存取的特性

3.13 循环链表
将单链表中终端节点的指针端由空指针改为指向头节点, 就使整个单链表形成一个环, 这种头尾相接的单链表称为单循环链表, 简称循环链表(circular linked list)

3.14 双向链表
双向列表插入, 要先完善插入元素的 next 和 prior 指向, 再完善其他的

3.15 总结
- 线性表
- 顺序存储结构
- 链式存储结构
- 单链表
- 静态链表
- 循环链表
- 双向链表

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

推荐阅读更多精彩内容

  • 定义线性表(List):零个或多个数据元素的有限序列 数学定义若将线性表记为(a1, …, ai-1, ai, a...
    梁炜东阅读 654评论 0 0
  • 1.线性表的定义 线性表:零个或多个数据元素的有限序列序列:也就是说元素之间是有顺序的,若元素存在多个,则第一个元...
    e40c669177be阅读 2,035评论 6 15
  • 本文内容取自于小甲鱼的数据结构与算法。//www.greatytc.com/p/230e6fde9c75 ...
    阿阿阿阿毛阅读 2,876评论 0 7
  • 从数据的逻辑结构来分,数据元素之间存在的关联关系被称为数据的逻辑结构。归纳起来,应用程序中的数据大致哟如下四种基本...
    Jack921阅读 918评论 0 2
  • 前言 上一篇《数据结构和算法之时间复杂度和空间复杂度》中介绍了时间复杂度的概念和常见的时间复杂度,并分别举例子进行...
    VV木公子阅读 4,323评论 2 26