单链表基本操作

python实现单链表的基本操作 一、单链表 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始。单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) +指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。它的每个节点包含两个域,一... 阅读详情

带头结点单链表的基本操作(后续更新所有数据结构操作或者习题答案)

基本操作的注释都在代码中了,我新建的链表是用的头插法,来保证输入的顺序和检索的顺序相同

#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>

typedef int ElemType;
typedef struct LNode
{
    ElemType data;
    struct LNode *next;
} LNode, *LinkList;
//带头结点的尾插法建立链表,链表长度为n
LinkList List_TailInsert(LinkList &L, int n)
{
    L = (LinkList)malloc(sizeof(LNode));
    LNode *s, *r = L;
    srand(time(0));
    for (int i = 0; i < n; i++)
    {
        s = (LNode *)malloc(sizeof(LNode));
        s->data = rand() % 100 + 1;
        r->next = s;
        r = s;
    }
    r->next = NULL;
    return L;
}

//首先完成找到第i个位置的结点算法
LinkList GetNode(LinkList &L, int i)
{
    if (i == 0)
    {
        return L;
    }
    int j = 0;
    LNode *p = L->next;
    while (p != NULL && j < i)
    {
        p = p->next;
        j++;
    }
    return p;
}

//结点的插入操作需要找到其前驱元素,例如如果要在i位置插入一个结点,那么就应该找到i-1位置并插入这个新的结点
void InsertNode(LinkList &L, int i, ElemType e)
{
    LNode *s, *p = GetNode(L, i - 1);
    s = (LNode *)malloc(sizeof(LNode));
    s->data = e;
    s->next = p->next;
    p->next = s;
} //学习了头插法之后,插入操作不在话下

//  扩展:如果规定了就要在特定的p结点之前插入一个结点(p结点之前透明),那么可以采用交换元素操作
//,可以采取在p结点后新插入一个结点,然后交换p结点与新建结点中的元素,我觉得这个办法相当的骚
void Head_InsertNode(LinkList &L, int i, ElemType e)
{
    LNode *s, *p = GetNode(L, i); //这里为了方便就选取第i个位置进行示范,以区别于InsertNose函数
    s->next = p->next;
    p->next = s;
    //交换元素
    s->data = p->data;
    p->data = e;
}

//删除一个结点
void DeleteNode(LinkList &L, int i)
{
    //找到位置为i-1的p结点
    LNode *q, *p = GetNode(L, i - 1);
    q = p->next;
    p->next = q->next;
    free(q);
}
/*void DeleteNode(LinkList &L, int i)
{
    //找到位置为i-1的p结点
    LNode *p = GetNode(L,i-1);
    p->next = q->next->next;
    free(p);
    这样就把p结点给释放了,总之要保存要删除的结点,因为后续要调用free()函数
}*/

//求链表长度
int GetLength(LinkList &L)
{
    int count = 0;
    LNode *p = L->next;
    while (p != NULL)
    {
        count++;
        p = p->next;
    }
    return count;
}
//遍历输出整个链表的内容
void PutAllElem(LinkList &L)
{
    LNode *p;
    p = L->next;
    while (p != NULL)
    {
        printf("%d ", p->data);
        p = p->next;
    }
}
//代码调试部分
int main()
{
    LinkList L;
    List_TailInsert(L, 5);
    PutAllElem(L);
    printf("\n");
    InsertNode(L, 1, 666);
    PutAllElem(L);
    printf("\n");
    DeleteNode(L, 1);
    PutAllElem(L);
    printf("\n");
    printf("链表的长度为:%d", GetLength(L));
    printf("\n");
    system("pause");
    return 0;
}

操作结果

单链表基本操作详解 #  单链表基本操作 文中提到的内容的链接一并列在这里: 顺序表:http://blog.youkuaiyun.com/bitboss/article/details/51559175 冒泡排序:http://blog.youkuaiyun.com/bitboss/article/details/51559034 选择排序:http://blog.youkuaiyun.com/bitboss/ 阅读详情

相关推荐

【头歌】单链表的基本操作

由于单链表中每个结点的存储地址是存放在其前趋结点的指针域中的,而第一个结点无前趋,头指针L指向第一个结点,对于整个单链表的读取必须从头指针开始,同时,由于单链表中最后一个结点的指针域为“空”(NULL),没有直接后继元素,对于整个单链表的读取必须在尾结点结束。要在带头结点的单链表L中删除第i个结点,则同样要先找到第i-1个结点,使p指向第i-1个结点,使q指向第i个结点,然后令第i-1个结点的指针域指向第i+1个结点,而后删除q指向的第i个结点并释放结点空间。= NULL时,才能进行删除结点的操作。

qq_39977056的博客 1万+

在单链表的第i个位置插入一个节点 算法

在这里插入代码片

jieranjie的博客 7706

STM32使用LORA模块通信

目录 一、模块使用方法 1、模块简介 2、硬件及功能 3、传输方式 二、模块上手 1、连接 2、编写代码 usart3.h usart3.c lora.h lora.c 一、模块使用方法 本文以正点原子ATK-LORA-01模块为例进行介绍。 1、模块简介 ATK-LORA-01-V3.0(V3.0是版本号,下面均以ATK-LORA-01表示该产品)是ALIENTEK推出的一款体积小、微功率、低功耗、高性能远距离LORA无线串口模块。模块设计是采用高效的IS...

qq_54706971的博客 3万+

单链表的插入和删除

在上一篇文章(单链表的定义)中我们已经了解了单链表的含义和简单的实现。那么在这篇文章中,我们将要来讲解单链表的插入和删除操作。我们在上篇文章中已经讲解过,如果想要在表L中的第i个位置上插入指定元素e,我们需要找到第i-1的结点,在其后插入新的结点。大致步骤如下:当然当我们想在第一位插入新结点时,对于带头结点的链表的好处就是,在头部插入数据和其他任意一个位置插入数据的操作是一样的,非常方便。 代码分析(在第一个位置插入结点) 若 i = 1我们直接看函数的内部在进入时首先会判断,i的合法性(i小于1是不合法的

hibugs 6437

3D 结构光相机工作原理全解 | 从编码投射到三维重建,原理 + 代码 + 工业实战一站式掌握

本文从3D结构光相机的整体架构出发,层层拆解了编码投射、相位计算、相位解包裹、三维重建的核心原理,补充了工业实战所需的公式推导、代码实现、参数调优、设备选型和案例落地,核心总结如下:相位是3D结构光成像的“灵魂”,其精度、稳定性直接决定3D重建的效果,包裹相位与绝对相位的区分的是工业实战的基础;编码投射的核心是“正弦条纹+格雷码条纹”组合,正弦条纹负责高精度相位提取,格雷码条纹辅助解包裹,适配工业场景的精度与稳定性需求;

getusushu的博客 411

Altium Designer应用技巧5: Altium Live账号的获得

为了更好的应用Altium Designer,我们需要得到一个Altium Live账号,但从其英文或者中文官方网站取得,都需要7个工作日的时间,而且对于个人用户来说,并不是100%都能够获取到。本文介绍一种,从俄罗斯Altium官方网站获取账号的方法,可以立即使用。     1、点击http://live.altium-ru.com/#Join网址进入俄罗斯Altium官方网站,Altiu

snmplink的博客 1万+

链式存储结构-单链表11个基本操作的实现(C语言)

单链表基本操作的实现 链式存储相关术语 单链表结构与顺序存储结构的比较 基本操作实现 初始化 判断链表是否为空 求表长 清空链表 销毁单链表 单链表的取值 查找 插入 在L中第i个位置之前插入新的数据元素e 删除第i个元素 单链表的建立 头插法 单链表的建立 尾插法

偶然路过的帅小伙z的博客 648

具身智能(26):RDK S100的LeRobot或Agile X piper机械臂控制模型

本文档详细介绍了基于ROS2的机器人控制模型架构与标定数据联动机制。核心采用"感知-规划-控制"闭环流程,通过激光雷达、相机和IMU的融合数据实现厘米级定位(≤1cm)。文档包含两大控制模型配置:1)RDKLeRobot模型,重点说明PID参数调节和标定文件路径设置;2)AgileXPiper模型,强调驱动安装与外部标定文件集成。针对常见问题提供解决方案,如控制指令无响应需验证标定路径,运动偏差过大需重新标定等。最后给出批量部署方案,通过复制基准配置文件实现多机器人快速配置,要求定位偏差

码农17年的博客 175

【C语言】单链表及插入(头插法、尾插法)

一、什么是单链表 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 单链表是链表的一种,每个节点只有一个指针指向下一个节点,最后的节点的指针指向空(NULL)。从头指针开始通过指针依次链接形成单链表。(头指针没有数据域) 二、单链表的插入 每个节点都...

chengzhou 1万+

阿里云 Docker 镜像加速收费后:这些免费替代方案值得收藏

阿里云Docker镜像加速服务收费后,国内开发者急需免费替代方案。本文推荐2025年仍可用的7个免费镜像源,包括轩辕镜像、DaoCloud、网易云等,并提供多源配置方案以提高稳定性。建议开发者在CI/CD环境中配置多个镜像源,避免构建失败。文章还提供了详细的配置步骤和使用建议,适合个人和团队开发者参考。

sg_knight的专栏 1928

图像处理基础 || (一) python 读取图像的常用方式

图像的读取与保存是图像处理或计算机视觉领域中最基本的操作,python中有众多的库支持图像的读取、显示与存储,常用的库包括 matplotlib、skimage 和 Pillow 库。

weixin_40234309的博客 5683

Java单链表插入基本操作(头插法、尾插法、任意位置插入法)

一、单链表的头插法 1、创建一个NODE节点的类,写一个public void addFirst()的函数来实现链表的头部插入,最后写一个public void display()的函数实现链表的打印输出 import java.util.Scanner; /** * Created with IntelliJ IDEA. * Description: * * @User:Mingaho * @Date:2021/04/10 * @Time:16:50 */ class NODE .

weixin_44798044的博客 6207

apollo-慢速车向左绕行

当主车前方出现其他车辆时,通过左侧车道对前车绕行。

是菜鸟o的博客 309

单链表的基本操作

例如:随着不段的学习深入,我们发现,线性表虽然可以随机存取表中任意一个元素,但是插入删除操作需要移动大量的元素,为此,引入了单链表。提示:以下是本篇文章正文内容,下面案例可供参考下为完整的代码部分。// 定义 ElemType 为 int// 数据域// 指针域,指向下一个结点// LNode 表示单个结点,LinkList 表示指向链表头指针// 1. 单链表初始化操作// 分配内存给头结点return 0;// 内存分配失败// 初始化为空链表return 1;// 初始化成功。

weixin_64334556的博客 1449

Bev算法在J5平台的部署

支持多种形式的Bev算法:ipmlss时序,以及基于transformer的gkt。

@bangbang的博客 845

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

C语言实现单链表的基本操作

王道c语言版数据结构--实现单链表的基本操作

weixin_46625488的博客 9703

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. 理解数据结构的基本概念、计算机内部数据对象的表示和特性。掌握线性表、树、图等数据逻辑结构、存储结构及其差异以及各种操作的实现。 本实验通过验证方式引导学

weiyuexin的博客 4808

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【数据结构】C语言实现单链表的基本操作

【数据结构】第二章——线性表(6) 详细介绍了通过C语言实现单链表的基本操作……

蒙奇D索大的博客 2664

单链表的基本操作以及头插法和尾插法建立单链表

本文主要关于单链表的基本操作,创建单链表,插入节点,删除节点,查找结点,清空节点,销毁节点,以及使用头插法和尾插法建立单链表

2201_75919511的博客 1376

数据结构之单链表的基本操作

#include<stdio.h> #include<string.h> #include<stdlib.h> typedef int ElemType; //单链表的结构 typedef struct LNode{ ElemType data; //结点的数据 struct LNode *next;//下一结点的地址,指向下一个结点 }L...

Gloming__zxy的博客 413
上一篇: python实现简单的散列查找
下一篇: 双向链表
mAN_DOm
博客等级 码龄8年 13粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值