前言:前面我们已经学习了顺序表和单链表,那么我们今天来学习数据结构中的另外一个线性表——带头双向循环链表。带头双向循环链表:头结点:带头也就是我们常说的“哨兵位”,头结点其中不存放任何的数据。哨兵位的存在可以帮助我们更好的进行链表的增删操作。双向:我们的单链表是单向的,只能从前访问到尾,而我们双向的则可以从前访问后一个,也可以从后访问前一个,但是我们的单链表不具备这样的功能。定义双向链表:typedefintLTDataType;typedefstructListNode{ structListNode*next; structListNode*prev; LTDataTypeval;}LTN
第一次写文章,为了大三算法课挣平时分哈哈哈以后会不定时更新每一次的算法作业或者平时的一些学习心得~这是第一个作业的第一题:对于一个不带头结点的单链表L,设计一个递归算法逆置所有结点。编写完整的程序并进行测试,分析其时间复杂度。但是看到这道题,王道书的课后题写过类似的题,但是忘得精光,在网上看了一些代码,终于又会了。不得不说,一辈子痛恨递归!!!对于我这种强迫症来说很不友好。暂时立个小flag,下面一段时间,每天练一道递归算法题,而且都要算时间复杂度和空间复杂度,进行“刻意训练”,重复重复再重复(希望这个小flag不要打水漂呜呜呜)回到正题~~~思路:递归函数f(L)返回值p:指向逆置函数的首结
目录链表的分类带头双向循环链表的实现带头双向循环链表的结构带头双向循环链表的结构示意图空链表结构示意图单结点链表结构示意图 多结点链表结构示意图链表创建结点双向链表初始化销毁双向链表打印双向链表 双向链表尾插尾插函数测试双向链表头插头插函数测试 双向链表尾删尾删函数测试双向链表头删头删函数测试双向链表查找双向链表pos位置前插插入函数测试 双向链表删除pos位置的结点删除函数测试利用ListInsert()函数改造头插尾插函数尾插函数改造版本头插函数改造版本利用ListEarse()函数改造头删尾删函数头删函数改造版本尾删函数改造版本计算双向链表长度链表的分类单向/双向单向列表:每一个结点结构
目录🍁一、链表的分类🌕1.单向或者双向🌕2.带头或者不带头(有无哨兵)🌕3.循环或者不循环🌕4.无头单向非循环链表(常用)🌕5.带头双向循环链表(常用)🌕注意:🍁二、双向链表的定义:🍁三、带头双向循环链表的定义🍁四、带头双向循环链表操作实现(多文件)🌕1.定义:🌕2.获得新结点🌕3.初始化🌕4.尾插法2.1:优势2.2:尾插法大致分为“四步骤”:2.3:源代码🌕5.打印数据🌕6.尾删法6.1:相对于单链表,该链表也有几个优点:6.2:尾删步骤:6.3:源代码:🌕7.头插法7.1:四步骤:7.2:源代码🌕8.头删法8.1:步骤8.2:源代码🌕9.在pos位置之前插入结点9.1:源代码如下:9.2
文章目录链表综合算法设计——校园人事信息系统1.要求2.代码实现(以带头双向循环链表为例)2.1基本程序结构2.2节点和链表的初始化2.3链表的插入2.4链表的显示2.5链表的删除2.6链表的修改2.7链表的排序(仿函数实现)3.全部源码链表综合算法设计——校园人事信息系统1.要求 课程设计题目1–链表综合算法设计 一、设计内容 已知简单的人事信息系统中职工记录包含职工编号(no)、职工姓名(name)、部门名称(depname)、职称(title)和工资数(salary)等信息(可以增加其他信息),设计并完成一个简单的人事信息管理系统,要求完成但不限于以下功能: (1)增加一个职工信
目录方法一算法视频分析方法二 算法视频分析Q:什么是“就地”捏?A:就是指辅助空间复杂度为O(1),通俗一点来说就是不需要再开辟一块空间来实现算法。特别说明: 笔者第一次录制视频,言语有些不顺,还望大家见谅!如有错误,请大家指出。方法一 头插法,将头结点摘下来,然后从第一结点开始,一次插入到头结点后面(头插法建立单链表),直到最后一个结点为止。LinkListReverse_1(LinkListL){ LNode*p,*r;//p为工作指针,r为p的后继,以防止出现断链 p=L->next;//从第一个元素结点开始 L->next=NULL;//先将头结点L的next域置
文章目录前言循环单链表定义循环对比非循环优势修改循环单链表操作初始化建立链表头插法尾插法打印链表链表长度查找操作按值查找按位查找插入操作删除操作删除结点销毁链表判空判尾完整代码及实列完整代码测试结果前言循环单链表在单链表的基础上进行改进。思考一下,普通单链表从表头遍历到表尾,时间复杂度为o(n),如果我想从表尾找到表头呢?时间复杂度也还是o(n)。怎么快速从表尾找到表头,于是引入了循环链表。整个链表形成闭环,表尾找到表头,时间复杂度为o(1)。循环单链表定义循环单链表是首尾相连的一种单链表,即将最后一个结点的空指针改为指向头结点或第一个结点的形成一个环型,最后一个结点称为尾指针:tail。判断
简介什么是双向带头循环链表?上面简单的一个非空带头循环双向链表逻辑图如何定义一个双向链表?typedefintLTDataType;typedefstructListNode{ structListNode*prev;//前驱指针 LTDataTypedata;//存放数据 structListNode*next;//后驱指针}ListNode;根据图和代码可以看双向链表就是单链表的每个结点中,在设置一个指向前驱节点的指针初始化双向链表简单认识之后,对他进行初始化(申请一个头节点,让前驱和后驱指针都指向自己)代码如何写?首先申请一个新结点(后面插入还需要申请空间直接封装成函数调用)ListNo
目录一.leetcode剑指OfferII027. 回文链表1.问题描述2.问题分析与求解(1)快慢指针法定位链表的中间节点(2) 将链表后半部分进行反转附:递归法反转链表(3) 双指针法判断链表是否回文二.带头双向循环链表的实现1.头文件2.节点内存申请接口和链表初始化接口3.链表的打印和查找接口4.链表的增删接口5.链表销毁接口一.leetcode剑指OfferII027. 回文链表剑指OfferII027.回文链表-力扣(Leetcode)1.问题描述给定一个链表的头节点head,请判断其是否为回文链表。(是回文链表则程序返回true,不是回文链表则程序返回false)如果一个链表是回文
=========================================================================相关代码gitee自取:C语言学习日记:加油努力(gitee.com) =========================================================================接上期:【数据结构初阶】三、线性表里的链表(无头+单向+非循环链表)_高高的胖子的博客-CSDN博客 ===================================================================