数据结构线性表 笔记

线性表是零个或多个具有相同类型的数据元素的有限序列
分为顺序储存结构和链式存储结构
线性表的长度随着表中的元素个数而变化
存储单元都有自己的编号叫做地址

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

优点 : 无须为表中元素之间的逻辑关系而增加额外的存储空间
可以快速存取表中任一位置的元素

缺点 : 插入删除操作需要移动大量元素
造成存储空间碎片
长度变化较大时,难以确定存储空间

查询时间为O[1],插入删除为O[n]

结点

存储数据元素信息的域称为数据域,
存储后继位置的域称为指针域,这两部分信息组成结点

单链表

n个结点组成链表,即线性表的链式存储结构
因为此链表每个节点只包含一个指针域,所以叫做单链表,按表中数据元素的逻辑次序链接在一起
(a后面是b,b后面是c, a不知道c,c不知道a)

头指针 头结点

链表中第一个结点的存储位置叫做头指针,最后一个结点指针为空

为了更方便操作,会在链表的第一个结点前附设一个结点称为头结点,可以不存储任何信息,也可以存储如长度等附加信息
头结点的指针域指向第一个结点的指针

头结点不一定是链表的必要元素
无论链表是否为空,头指针均不为空


单链表不知道长度不能用for,核心思想就是工作指针后移
第一次查找时间为O[n],插入和删除未O[1],增删越频繁,单链表的效率优势越明显
单链表不需要分配存储空间,只要有就可以分配

静态链表

不适用指针处理链表
用数组代替指针描述单链表,数组由元素和下标构成,这种描述方式叫做静态链表
把未使用的和删除的分量用游标组成备用链表,,每当插入式,便可以从备用链表上取得第一个结点作为待插入的新结点

优点在增删是只需要改变游标(下标)不需要移动元素,从而改进顺序存储结构中的插入和删除操作需要移动大量元素的缺点

缺点:失去了顺序存取的特性
没有解决连续储存分配带来的表长难以确定的问题

循环链表

将单链表中终端结点由空指针改为指向头结点,使单链表形成一个环,这种头尾循环的单链表简称为循环链表
循环链表和单链表的主要差异在于循环判断条件上,单链表判断空,循环判断等不等于头结点
用指向终端结点的尾指针表示循环链表,查找结点的时间为O[1]

双向链表

是单链表的每个结点中,在设置一个指向前驱结点的指针域.所以双向链表中的每个结点都有两个指针域,一个指向直接后继,直接前驱

双向链表也可以是循环链表
再插入和删除时并不复杂,不过顺序很重要
插入一个只需告知前一个和后一个

由于每个结点要记录两份指针占用空间要略多一些,但提高了算法性能

带头节点的双循环链表最省时

链表最常用的操作是在末尾插入节点和删除尾节点,在尾巴插入 删除操作:都需要知道他的前导 而单链表要查找到最有一个元素需要遍历全部链表双链表直接可以查到前导;最常用的操作实在最后一个元素之后插入一个元素和删除第一个元素删除头结点 需要头指针 或者只用一个->next域就能查到 速度就快了在有第二个条件 删除最后一个元素 有尾指针就最好了 可以直接找到尾巴元素 同时他还是循环链表 ->next就是头结点

你可能感兴趣的:(数据结构线性表 笔记)