2.5.单链表的定义

约瑟夫问题用不含头结点的循环单链表解决 问题描述: 设有n个人围坐在一个圆桌周围,现从第s个人开始报数,数到第m的人出列,然后从出列的下一个人重新开始报数,数到第m的人又出列,…,如此反复直到所有的人全部出列为止。Josephus问题是:对于任意给定的n,s和m,求出按出列次序得到的n个人员的序列。 现以n=8,s=1,m=4为例,问题的求解过程如图2-15所示。图中s1指向开始报数位置,若初始的顺序为n1,n2,n3,n4,n5,n6,n7,n8。则问题的解为n4,n8,n5,n2,n1,n3,n7,n6。... 阅读详情


一.单链表的定义:

相比于顺序表,单链表不可随机存取,因此单链表中查找数据必须是一个一个找-->查找效率低


二.用代码定义一个单链表:

单链表每一个节点有数据元素和存放该元素的指针,该指针指向下一个节点

GetElem方法解读:

把单链表L中的第i个节点取出来,并返回。

参数列表中LinkList L也可以用LNode *L。

LNode是一个结构体类型,LNode *就代表返回了一个指针,因为p为指针。(LNode * p)

LinkList是指针类型,用->关键词访问数据。

方法体解读:LNode *p=L->next;代表L是指针指向下一个节点

如果i为0,直接返回下一个节点;

不为0时如果走第二个if语句说明i为负数,边界点,如果是-1,下一个为0,但已经有了,

如果是-2,下一个是-1,就没意义了,返回空值。

两个if语句都没走时,就正常执行。

例如:


三.初始化单链表:

1.不带头结点的单链表:

注:InitList函数里的参数LinkList &L用了引用&,因为函数的结果和函数体的结果最后都还要用。没用&的话函数结束后相当于只得到了函数的结果,而函数体的结果就无法得到(比如没加&,最后得到了函数的返回值,但最终L是否被赋值为NULL就无法确定)。

2.带头结点的单链表:


四.不带头结点的单链表对比带头结点的单链表:

不带头结点的单链表那么头指针所指向的下一个节点就是实际用于存放数据的节点;

带头结点的单链表那么头指针他所指向的这个节点即头结点,是不存放实际元素的,只有这个头结点之后的下一个节点才会用于存放数据(常用带头结点的单链表)。


五.总结:


使用单链表求解约瑟夫环问题 (自定义单链表) 约瑟夫环(Josephus)问题:古代某法官要判决n个犯人的死刑,他有一条荒唐的法律,将犯人站成一个圆圈,从第s个人开始数起,每数到第d个犯人,就拉出来处决,然后再数d个,数到的人再处决……直到剩下的最后一个可赦免。当n=5,s=1,d=2,时: 第一步:定义节点Node public class Node { public T data; public Node next; publ 阅读详情

相关推荐

数据结构——单链表的定义和实现

文章目录单链表的定义单链表的实现 单链表的定义 单链表的实现

流楚丶格念的博客 7483

2.5.1 单链表的定义和表示

单链表是线性表链式存储结构的一种,每个节点中只包含一个指针域,这个指针域指向下一个节点,形成一系列的元素链。单链表通过头指针唯一确定,头指针指向链表的第一个节点。如果链表为空,则头指针的值为NULL。int data;// 数据域// 指针域,指向下一个节点单链表作为线性表的链式存储结构,通过节点间的指针连接实现元素的逻辑顺序。相比于顺序存储结构,链式存储结构在插入和删除操作时无需移动大量元素,提高了操作效率。头节点的引入进一步简化了链表操作,使得对链表的处理更加统一和方便。

tang7mj的博客 510

数据结构—习题2.5 将一个带头结点的单链表分解成两个单链表

1.问题描述 设计算法将一个带头结点的单链表L1分解为两个具有相同结构的链表L2、L3,其中L2表的结点为L1表中值小于零的结点,而L3表的结点为L1表中值大于零的结点(链表L1中的元素为非零整数,要求L2、L3表利用L1表的结点)。 2.题目分析 L2表的头结点使用原来L1表的头结点,为L3表新申请一个头结点。从L1表的第一个结点开始,依次取其每个结点p,判断结点p的值是否小于0,利用前插法...

小虾米编程 7037

5.2 单链表的定义 只有一半,30号接着学

这位大佬讲的非常细致入微,列举了两种错误情况域正确答案。指针交换要给函数传过去地址作形参,然后通过形参直接对指针对应的变量操作,这样函数结束后,形参被撤销,变量依然保留被操作后的状态,即交换成功。通过结构体变量来构建一个结点,注意结构体变量中的成员数据类型,尤其注意结点指针域的类型是结构体变量,用于指向下一个结点。①使用指针构建函数来交换数据的原理。

2301_80962064的博客 267

3-5 单链表分段逆转 (20 分)

给定一个带头结点的单链表和一个整数K,要求你将链表中的每K个结点做一次逆转。例如给定单链表 1→2→3→4→5→6 和 K=3,你需要将链表改造成 3→2→1→6→5→4;如果 K=4,则应该得到 4→3→2→1→5→6。 函数接口定义: void K_Reverse( List L, int K ); 其中List结构定义如下: typedef struct Node *PtrToNode;...

BQDQSZ的博客 3001

3-5 单链表分段逆转 pta

3-5 单链表分段逆转 (20分) 给定一个带头结点的单链表和一个整数K,要求你将链表中的每K个结点做一次逆转。例如给定单链表 1→2→3→4→5→6 和 K=3,你需要将链表改造成 3→2→1→6→5→4;如果 K=4,则应该得到 4→3→2→1→5→6。 函数接口定义: void K_Reverse( List L, int K ); 其中List结构定义如下: typedef struct Node PtrToNode; struct Node { ElementType Data; / 存储结点数据

m0_46314516的博客 2437

【数据结构入门】2.5.2线性表的链式表示和实现(带头结点的单链表定定义)(持续更新ing)

本文介绍了单链表数据结构的基本概念和实现方法。主要内容包括:1)单链表的结构定义,使用typedef创建结构体别名Lnode和指针类型LinkList;2)结点由数据域(存储学生姓名和学号)和指针域(指向下一个结点)组成;3)通过示例代码演示了如何创建三个学生结点并连接成链表,最后用头指针遍历链表输出数据。文章适合配合数据结构的课程学习,提供了手写笔记形式的讲解,便于理解单链表的存储结构和基本操作。

2504_92024050的博客 429

6-63 将单链表按基准划分

编写一个程序,以给定值x为基准将单链表分割为两部分,所有小于x的结点排在大于或等于x的结点之前。你应当 保留 两个分区中每个节点的初始相对位置。

燕朝铭的博客 1008

基础实验3-2.2 单链表分段逆转 (25 分)

数据结构与算法题目集(中文)基础实验3-2.2 单链表分段逆转 (25 分) (C语言)二、题解c代码 基础实验3-2.2 单链表分段逆转 (25 分) (C语言) 给定一个带头结点的单链表和一个整数KKK,要求你将链表中的每KKK个结点做一次逆转。例如给定单链表 1→2→3→4→5→61→2→3→4→5→61→2→3→4→5→6 和 K=3K=3K=3,你需要将链表改造成 3→2→1→6→5→43→2→1→6→5→43→2→1→6→5→4;如果 K=4K=4K=4,则应该得到 4→3→2→1→5→64→3

信处的博客 5668

DIC新手避坑指南:压缩实验中的应变测量常见错误与数据校验技巧

本文为DIC技术新手提供了压缩实验中应变测量的全面避坑指南。文章系统梳理了从试样尺寸录入、散斑质量到数据后处理中应变方向与符号混淆、数据插值对齐等常见错误,并分享了基于MATLAB的自动化数据校验与可视化对比技巧,帮助建立可靠的实验数据分析SOP,确保DIC测量结果的准确性。

weixin_29313423的博客 113

【DDSCAT——离散偶极近似仿真程序04】参数理解和模型设计

在这一部分,我们开始理解DDSCAT程序设计中的一些参数问题。 承接第二部分内容中的ddscat.par文件,我们来聊一聊偶极子、实际体积、有效半径等关键词。 一、偶极子点阵 手册中说,我们需要设计模型(target/目标),它是有偶极子点阵组成的。偶极子,顾名思义,是由一对电荷组成的,但我们不用设计一对,我们设计一个点就行,...

XD_Yangf的博客 7552

6-6 单链表分段逆转

其中List/* 指针即结点位置 *//* 存储数据*//*线性表中下一个元素的位置 *//* 单链表头指针 */int length;/* 表长 */函数接口定义中,ElemSet是用户定义的数据类型,例如 int、double 或者 char 等;list是给定的带头结点的单链表,k是每段的长度。函数K_Reverse应将list中的结点按要求分段逆转。

mmmmath_3的博客 319

基于verilog的16QAM调制

思路1:正交调幅法——实现16QAM调制,可以理解为时相位相差90度的两个正弦波的4PAM叠加。 4比特输入经过2->4进制转化得到两路2比特输入,然后分别经过4PAM后叠加所得输出即为16QAM调制结果。 具体程序稍后编写。 思路2:复合相移法——可以借助前面编写的QPSK,相当于两路幅度不同的QPSK的叠加,比如幅度分别取1和3 。 思路1正交调幅法的设计方案: 两正弦波相位差...

weixin_30725467的博客 2929

反转一个单链表

反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode...

anda0242的博客 155

保姆级教程:用QSTEM和DrProbe搞定你的第一张STEM模拟图(附Fe3O4实例文件)

本文提供了一份详细的STEM模拟图像生成教程,涵盖从晶体结构获取到最终图像模拟的全过程。通过QSTEM和DrProbe软件的操作指南,帮助材料科学研究者快速掌握STEM模拟技术,特别适合初学者。教程包含Fe3O4实例文件,详细解析参数设置、计算优化和结果分析等关键步骤。

weixin_33730836的博客 523

搞定ESD(九):静电放电之PCB设计

不同信号参考地平面应尽量保持完整,减小静电电流流过参考地平面时造成的电位差,防止电位差导致的信号传输电平错误.主芯片GPIO信号布线应保持最短化,减小与参考地平面之间的电场耦合,同时也防止因信号环路面积较大耦合静电放电噪声干扰。外部端子接地引脚顶层采用分地设计,最好是直接过孔到完整参考地平面接地,避免与顶层信号包地、其它包地相连,防止顶层串扰耦合到其它信号,造成ESD问题。

记得诚 1951

Java自定义实现单链表

目录 一、自定义java单链表原理概述 二、自定义java单链表功能实现细节 三、实现代码 一、自定义java单链表原理概述 单链表概念及结构 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) +指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。 自定义实现功能图示 原理图示 实现原理分析 二、自定义java单链表功能实现细节 自定义Linke.

weixin_51373750的博客 2901

Openclaw错误分析与解决方案之:All models are temporarily rate-limited. Please try again in a few minutes

Openclaw错误分析与解决方案之: All models are temporarily rate-limited. Please try again in a few minutes.

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 1619

R6-2 单链表元素正数和以及结点数

L是带头结点的单链表的头指针,其中元素结点的数据域为整数,输出链表中数据域为正数的元素和以及单链表中元素结点数。如果单链表为空,和为0。int data;//数据域。

2301_79856574的博客 297

ArcGIS实验教程——实验十七:缓冲区分析(Buffer Analysis)

【实验描述】缓冲区(Buffer)是为了识别某一地理实体对周围地物的影响而在其周围建立的一定宽度多边形区域,缓冲区分析(Buffer Analysis)是用来确定不同地理要素的空间临近性或接近程度的一种分析方法。作为GIS的空间分析方法之一,缓冲区分析的应用范围特别广泛,常用于分析矢量实体对周围的影响。例如,工厂排放的废水废气所影响的空间范围等等。 一、缓冲区的基本概念 1、缓冲区 是地理空间目标的一种影响范围或服务范围。 2、缓冲区分析 指根据分析对象的点、线、面实体,自动建立它们周围一定距离的带

智慧空间实验室 1万+

SAP BTP ABAP environment 集成本地系统实践:Cloud Connector、Connectivity service 与隧道通信全解析

摘要: 随着ABAP开发者向云端扩展业务逻辑,如何安全访问企业内网SAP系统成为关键问题。本文基于SAP官方文档,解析通过Cloud Connector和Connectivity service实现云端ABAP环境与本地系统集成的方案。 架构上分为四个角色:ABAP环境、Connectivity服务、Cloud Connector和内网系统。Cloud Connector作为内网出口,通过TLS隧道主动连接云端,避免防火墙开放入站端口。Connectivity服务则作为子账户级“总机”,自动路由请求。 实施

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 312

链表的定义与单链表的应用

链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。//结构体指针//指向下一个结点的指针}SLTNode;此串代码可以让我们简单的定义一个单链表。(1)结点:与顺序表不同的是,链表⾥的每节"⻋厢"都是独⽴申请下来的空间,我们称之为“结点/结点”结点的组成主要有两个部分:当前结点要保存的数据和保存下⼀个结点的地址(指针变量)(2)链表的性质1、链式机构在逻辑上是连续的,在物理结构上不⼀定连续2、结点⼀般是从堆上申请的。

2302_79820190的博客 1640

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

单链表的定义、特点、结构及其一些基本操作

一,基本运算 1,单链表,双链表的定义: 设计链式存储结构时,每个逻辑节点存储单独存储。 2,单链表的基本结构: 头节点在前,首节点在后。 3,顺序表与链表间存储密度的差异: 顺序表的存储密度为1,而链表的存储密度小于1。 4, typedef struct LNode { ElemType data; //存放元素值 struct LNode *...

HelloWorld 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

2.5单链表的基本运算

2.5单链表的基本运算 1、求单链表长度操作 在顺序表中,线性表的长度是它的属性,数组定义时就已确定。 在单链表中,整个链表由“头指针”来表示,单链表的长度在从头到尾遍历的过程中统计计数得到。 【算法思路】采用“数”结点的方法求出单链表的长度。即从“头”开始 “数(p=L->next),用指针 p 依次指向各个结点,一直“数”到最后一个结点(p->next= =NULL),从而得到单链表的长度。 顺链头开始,计数器 j 初值为 0 当前指针 p 指向链表 L 的首元结点 p=L->nex

WithoutEndFree的博客 2134

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

单链表的定义

1.用代码定义一个单链表 typedef struct LNode{ //定义单链表结点类型 ElemType data; //每个节点存放一个数据元素 struct LNode *next; //指针指向下一个结点 }LNode,*LinkList; 要表示一个单链表时,只需声明一个头指针L,指向单链表的第一个结点。 LNode *L; //声明一个指向单链表第一个结点的指针 或 Link...

m0_68169483的博客 2649

【数据结构详细学习笔记2】单链表的定义和表示

单链表基础知识,单链表代码实现,实现单链表遇到问题

longbow_nice的博客 2397
上一篇: 1.1.Stream流-初爽Stream流
下一篇: 2.3.顺序表的插入与删除
巧克力拌面
博客等级 码龄3年 1153粉丝 282原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值