Leap Day6——数据结构与算法 循环链表、双向链表、线性表的应用

本文详细介绍了单链表、双向链表、循环链表的定义、初始化、插入和删除操作,以及它们之间的效率比较,同时还讨论了顺序表和链表的区别,以及链表合并的相关算法。
摘要由CSDN通过智能技术生成

1.7 算法描述

2、双向链表

2.1 定义

2.2 双向链表的初始化

2.3 双向链表的插入

2.4 双链表的删除

3、单链表、循环链表、双向链表的时间效率比较

4、顺序表和链表的比较

5、线性表的合并

5.1 问题描述

5.2 代码呈现

6、有序表的合并

6.1 问题描述

6.2 算法步骤

6.3 代码呈现

7、链表的合并


1、循环链表

======

1.1 定义


是一种头尾相连的链表(即:表的最后一个结点的指针域指向 头结点,整个链表形成一个环)

1.2 优点


从表中的任何一个结点出发均可以找到表中的其他结点

1.3 链表的终止条件


判断他们是否指向了头指针

p != L p -> next != L

1.4 初始化链表


//初始化一个循环单链表

bool InitList(LinkList &L){

L=(LNode *)malloc(sizeof(LNode));//分配一个头结点

if(L==NUll) //内存分配不足,分配失败

return false;

L->next=L; //头结点next指向头结点

return true;

}

1.5 带有尾指针的循环链表


1.6 合并带有尾指针的两个循环链表


1.7 算法描述


LinkList Connect(LinkList Ta,LinkList Tb){

p = Ta->next; //p存表头结点

Ts->next = Tb->next->next; //Tb表头连接到Ta表尾

delete Tb->next; //释放Tb表头结点

Tb ->next=p; //修改指针

return Tb;

}

2、双向链表

======

2.1 定义


在单链表中,查找直接后继结点的执行时间为O(1),而查找直接前驱的执行时间为O(n)。为克服单链表这种单向性的缺点,可利用双向链表(Double Linked List)。

顾名思义,在双向链表的结点中有两个指针域,一个指向直接后继,另一个指向直接前驱。结点结构如下图所示。

双向循环链表

2.2 双向链表的初始化


typedef struct DuLNode{

ElemType data; //数据域

struct DuLNode *prior; //指向直接前驱

struct DuLNode *next; //指向直接后驱

}DuLNode,*DuLinkList;

2.3 双向链表的插入


bool ListInsert_DuL(DuLinkList &L,int i,ElemType e){

//在带头结点的双链表L中第i个位置之前插入元素e

DuLNode *p,*s;

if(!(p=GetElem_DuL(L,i))) //在L中确定第i个元素的位置指针p

return false; //p为NULL时,第i个元素不存在

s=(DuLNode )malloc(sizeof(DuLNode));//生成新结点s

s->data=e; //将结点*s数据域置为e

s->prior=p->prior; //将结点*s插入L中,此步对应上图①

p->prior->next=s; //对应上图②

s->next=p; //对应上图③

p->prior=s; //对应上图④

return true;

}

2.4 双链表的删除


void ListDelete_DuL(DuLinkList &L,int i){

//删除带头结点的双向链表L中的第i个元素

DuLNode *p,*s;

if(!(p=GetElem_DuL(L,i))) //在L中确定第i个元素的位置指针p

return false; //p为NULL时,第i个元素不存在

p->prior->next=p->next; //修改被删结点的前驱结点的后继指针,对应上图①

p->next->prior=p->prior; //修改被删结点的后继结点的前驱指针,对应上图②

free§; //释放被删结点的空间

}

3、单链表、循环链表、双向链表的时间效率比较

======================

4、顺序表和链表的比较

===========

1)链式存储结构的优点:

  • 结点空间可以动态申请和释放

  • 数据元素的逻辑次序靠结点的指针来指示,插入和删除时不需要移动数据元素

2)链式存储结构的缺点:

  • 存储密度小,每个结点的指针域需要额外占用存储空间,当每个结点的数据域所占的字节不多时,指针域所占用存储空间的比重显得很大

  • 链式存储是非随机存取结构,对任一结点的操作都要从头结点依指针链查找到该结点,这增加了算法的复杂度
    自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

前端CSS面试题文档,JavaScript面试题文档,Vue面试题文档,大厂面试题文档,需要的读者可以戳这里免费领取!

.(img-OB6aB9xf-1713545178234)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

[外链图片转存中…(img-tNgAWSCO-1713545178234)]

最后

前端CSS面试题文档,JavaScript面试题文档,Vue面试题文档,大厂面试题文档,需要的读者可以戳这里免费领取!

[外链图片转存中…(img-ckUQW5Ds-1713545178234)]

[外链图片转存中…(img-SSWnJ7rr-1713545178235)]

  • 12
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值