数据结构笔记4-链表

单链表

单链表的插入

        最坏的情况是在表尾插入,故时间复杂度O(n),空间复杂度O(1)。

        单链表要小心断链,防止“临场掉链子”。

 注意:在链表的第p个位置上插入一个元素的含义我们假定是,该插入操作完成后新结点在链表中              的位置是p。

单链表的删除

        最坏情况就是需要删除单链表的最后一个结点,时间复杂度是O(n),空间复杂度O(1)。

单链表的整表创建

         其实就是动态生成链表的过程,分头插法和尾插法,记“头逆尾顺”。头插法生成的是逆序的,尾插法生成的是顺序的。

单链表的整表删除

        时间复杂度是O(n),空间复杂度O(1)

        思路:用一个临时指针变量指向当前结点的下一个结点,然后删除当前结点,接着将临时指针指向的结点作为当前结点,重复上述过程直到所有结点均被删除为止。

单链表结构VS顺序存储结构

        1)若线性表需要频繁查找,很少进行插入和删除操作时,宜采用顺序存储结构。

        2)当线性表中的元素个数变化较大或者根本不知道有多大时,最好用单链表结构。

静态链表

        用数组描述的链表。

        1)数据域data---用来存放数据元素。

        2)cur相当于单链表中的next指针,存放该元素的后继在数组中的下标,cur叫游标。

        注意:数组第一个最后一个元素作为特殊元素处理,不存数据。

                即下标为0的元素的cur就存放备用链表的第一个结点的下标,(未被使用的数组元素称为 备用链表)。

                即最后一个的cur存放第一个有数值的元素的下标,相当于头结点作用,space[0].cur为头指针。

循环链表

        循环的判断条件:判断p->next不等于头结点,则循环未结束。

        在循环链表中不存在具有NULL指针的结点。

循环单链表的最大优点:从任意结点出发都可访问到链表中的每一个元素。

        遍历整个长度为n的链表,时间复杂度是O(n),空间复杂度O(1),一个辅助指针变量,一个计数变量。

双向链表

        插入操作,顺序很重要,还是要警惕断链,时间复杂度是O(n),空间复杂度O(1)。

        

        删除操作: 时间复杂度是O(n),空间复杂度O(1),因为可能需要扫描整个长度为n的链表

 带头结点的双向循环链表L为空表的条件是:

                                                L->prior==L->next&&L->next==L

带头结点的双循环链表L中只有一个元素结点的条件是:

                                      L->next->next==L&&L->prior->prior==L &&L->next!=L

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值