当前位置 博文首页 > 浮若星光的博客:线性表

    浮若星光的博客:线性表

    作者:[db:作者] 时间:2021-07-12 13:00

    线性表线性表的定义及特点:
    1、存在唯一的第一个元素;(这一点决定了图不是线性表)
    2、存在唯一的最后一个元素;
    3、除第一个元素外,其它均只有一个前驱(这一点决定了树不是线性表)
    4、除最后一个元素外,其它均只有一个后继。
    线性表的顺序表示和实现
    1、 线性表的顺序存储表示
    线性表的顺序存储结构:把线性表的结点按逻辑顺序依次存放在一组地址连续的存储单元里。用这种方法存储的线性表简称顺序表。是一种随机存取的存储结构。顺序存储指内存地址是一块的,随机存取指访问时可以按下标随机访问,存储和存取是不一样的。如果是存储,则是指按顺序的,如果是存取,则是可以随机的,可以利用元素下标进行访问。
    数组比线性表速度更快的是:原地逆序、返回中间节点、选择随机节点。
    便于线性表的构造和任意元素的访问
    插入:插入新结点,之后结点后移。平均时间复杂度:O(n)
    删除:删除节点,之后结点前移。平均时间复杂度:O(n)
    2、 顺序表中基本操作的实现
    顺序表:他是在计算机内存中以数组形式保存的线性表。使用一组地址连续的存储单元依次存储数据元素的线性结构。
    线性表的链式表示和实现
    线性链表:用一组任意的存储单元来依次存放线性表的结点,这组存储单元即可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的。
    因此,链表中结点的逻辑次序和物理次序不一定相同。为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其后继结点的地址。data域是数据域,用来存放结点的值。next是指针域(亦称链域),用来存放结点的直接后继的地址(或位置)。不需要事先估计存储空间大小。
    1、 单链表的定义与表示
    单链表:是一种链式存储的结构。用一组地址任意的存储单元存放线性表中的数据元素。(存储地址空间不需要是连续的)
    单链表中每个结点的存储地址是存放在其前趋结点next域中,而开始结点无前趋,故应设头指针head指向开始结点。同时,由于最后一个结点无后继,故结点的指针域为空,即NULL。头插法建表(逆序)、尾插法建表(顺序)。增加头结点的目的是算法实现上的方便,但增大了内存开销。
    查找:只能从链表的头指针出发,顺链域next逐个结点往下搜索,直到搜索到第i个结点为止。因此,链表不是随机存取结构。
    插入:先找到表的第i-1的存储位置,然后插入。新结点先连后继,再连前驱。
    删除:首先找到ai-1的存储位置p。然后令p–>next指向ai的直接后继结点,即把ai从链上摘下。最后释放结点ai的空间.r=p->next;p->next=r->next;delete r。
    判断一个单向链表中是否存在环的最佳方法是快慢指针。
    2、单链表基本操作的实现
    3、循环链表
    循环链表:是一种头尾相接的链表。其特点是无须增加存储量,仅对表的链接方式稍作改变,即可使得表处理更加方便灵活。
    在单链表中,将终端结点的指针域NULL改为指向表头结点的或开始结点,就得到了单链形式的循环链表,并简单称为单循环链表。由于循环链表中没有NULL指针,故涉及遍历操作时,其终止条件就不再像非循环链表那样判断p或p—>next是否为空,而是判断它们是否等于某一指定指针,如头指针或尾指针等。

    cs
    下一篇:没有了