数据结构_单链表

[数据结构]链表之单链表 单链表是一种常见的线性数据结构,由若干个节点组成,每个节点包含两部分:数据元素和指向下一个节点的指针。每个节点只有一个指针,通常称为 next 指针,它指向该节点的后继节点。头节点是第一个节点前面额外添加的一个节点,它不包含数据元素,但是包含对第一个节点的指针。单链表可以表示任意长度的序列,可以动态地插入、删除节点,使其具有灵活性和高效性。但由于每个节点只有一个指针,因此单链表只能从前往后遍历,不能反向遍历。以下是单链表常用的操作:创建链表:创建一个空链表,可选是否带有头节点。 阅读详情
#ifndef _JXLIST_H_  
#define _JXLIST_H_  
  
#include <stdlib.h>  
  
template<typename T>  
class CJxList  
{  
protected:  
    typedef struct _Node  
    {  
        T               pData;      //数据  
        struct _Node*   pNext;      //前驱指针  
        struct _Node*   pPre;       //后驱指针  
    }Node;  
public:  
    CJxList(void):m_nSize(0),m_pHead(nullptr),m_pTail(nullptr)  
    {  
    }  
  
    ~CJxList()  
    {  
  
    }  
  
    //在头增加数据  
    bool AddBeginEle(T pdata)  
    {  
        //创建一个新的节点  
        Node* pNewNode = (Node*)malloc(sizeof(Node));  
  
        //复制数据指针变量  
        pNewNode->pData = pdata;  
        //把新节点元素的前驱指针为空  
        pNewNode->pPre = nullptr;  
  
        //把链表头指针赋给新节点的下一个节点的指针  
        pNewNode->pNext = m_pHead;  
  
        //把节点赋给头指针  
        if (m_nSize == 0)  
        {  
            m_pTail = pNewNode;  
  
        }  
        else  
        {  
            m_pHead->pPre = pNewNode;  
        }  
  
        //把新节点的指针赋给链表的头指针  
        m_pHead = pNewNode;  
        //链表节点增加一个  
        m_nSize++;  
  
        return true;  
    }  
  
    //删除首数据并返回删除的数值  
    T   DelBeginEle()  
    {  
        if (m_nSize == 0 /*|| m_pHead == nullptr*/)  
        {  
            return false;  
        }  
      
        //临时储存链表的头指针  
        Node* pTmp = m_pHead;  
        //把链表的头指针所指向的下一个节点指针复制链表的头指针  
        m_pHead = pTmp->pNext;  
        if (m_nSize == 1)  
        {  
            m_pTail = nullptr;  
        }  
        else  
        {  
            m_pHead->pPre = nullptr;  
        }  
          
        //有效个数减一  
        m_nSize--;  
      
        //释放空间  
        //pTmp->pNext = nullptr; //可有可无  
        T ret = pTmp->pData;  
        free(pTmp);  
        return ret;  
    }  
  
    //删除链表中的尾元素  
    T DelEndEle()  
    {  
        if (m_nSize == 0 /*|| m_pHead == nullptr*/)  
        {  
            return false;  
        }  
        //临时储存链表的头指针  
        Node* pTmp = m_pTail;  
        m_pTail = pTmp->pPre;  
  
        //有效个数减一  
        m_nSize--;  
  
        //释放空间  
        //pTmp->pNext = nullptr;  
        T ret = pTmp->pData;  
        free(pTmp);  
        return ret;  
    }  
  
    //指定索引修改一个数据  
    bool UpdataEleByIndex(unsigned int index,T data)        //index索引从1开始  
    {  
        if (index > (m_nSize) || m_nSize <= 0)  
        {  
            return false;  
        }  
        Node* pTmpEndNode = m_pHead;  
        for (unsigned int i=0; i< (index-1); i++)  
        {  
            pTmpEndNode = pTmpEndNode->pNext;  
        }  
        //赋值数据  
        pTmpEndNode->pData = data;  
        return true;  
    }  
  
    //指定索引查找数据  
    T FindEleByIndex(unsigned int index)        //index索引从1开始  
    {  
        if (index > (m_nSize) || index <= 0)  
        {  
            return (T)0;  
        }  
        Node* pTmpEndNode = m_pHead;  
        for (unsigned int i=0; i< (index-1); i++)  
        {  
            pTmpEndNode = pTmpEndNode->pNext;  
        }  
        //赋值数据  
        return pTmpEndNode->pData;  
    }   
  
    /*将数据节点置为空表,释放原节点空间*/    
    void Clear()  
    {  
        Node* pTmpNext = m_pHead;   //临时节点指针  
        Node* pDelNode = m_pHead;   //删除节点指针  
        while (pTmpNext!=m_pTail)  
        {  
            //保存临时节点  
            pDelNode = pTmpNext;  
            //将临时节点的下一个节点指针保存  
            pTmpNext = pTmpNext->pNext;  
            //释放内存  
            free(pDelNode);  
            m_nSize--;  
        }  
  
        free(m_pTail);  
        m_nSize--;  
  
        m_pHead = nullptr;  
        m_pTail = nullptr;  
        //m_nSize = 0;  
    }  
  
    /*返回链表大小*/    
    int GetSize()  
    {  
        return m_nSize;  
    }  
  
    //判断是否为空  
    bool IsEmpty(){ return (m_nSize ? false : true); }  
  
private:  
    unsigned int    m_nSize;    //元素个数  
    Node*           m_pHead;    //头指针  
    Node*           m_pTail;    //尾指针  
};  
  
  
#endif  

光栅衍射有入射角时_衍射型多焦点人工晶体光学原理 多焦点人工晶体如何把光线分成多个焦点的?这个问题大部分专业书只是蜻蜓点水,并没有讲明白。希此文粗浅的解释,能帮您加深理解,请多指正。接下来,我将按照一下历史发展的顺序讲解一下:光的认识、菲涅尔灯塔(菲涅尔透镜)、菲涅尔波带盘(半波带盘)、多焦点人工晶体。一:首先复习一下光的认识历史。我们现在都知道光是一种电磁波,具有波粒二相性,但是认识光的本质也经历非常曲折漫长的过程。牛顿时代的几何光... 阅读详情

相关推荐

nRF开发环境搭建全攻略:VS Code + nRF Connect SDK + Zephyr实战

嵌入式开发中,环境配置往往是新手入门的第一道障碍,尤其面对基于Zephyr RTOS的Nordic nRF平台时,工具链的复杂度常让人望而却步。理解构建系统、SDK版本管理和调试工具之间的协作关系,是高效开发的前提。Zephyr作为开源实时操作系统,通过设备树和Kconfig实现硬件描述与功能配置,而nRF Connect SDK(NCS)则是Nordic基于Zephyr的增强发行版,两者结合为物联网开发提供了强大支持。基于VS Code搭建开发环境,配合west工具管理多仓库、CMake/Ninja执行构

weixin_29188997的博客 228

数据结构————单链表

单链表(Singly Linked List)是一种基本的数据结构,它由一系列节点组成,每个节点包含两部分:数据域和指针域。数据域用于存储实际的数据,而指针域则存储指向链表中下一个节点的地址。在单链表中,除了最后一个节点外,每个节点的指针域都指向下一个节点,最后一个节点的指针域通常设置为NULL,以标识链表的结束。单链表的特点是其存储不需要连续的内存空间,节点可以分散在内存中的任意位置,通过指针连接形成线性结构。头插法指的是在单链表的头部插入节点。新节点的指针将指向当前的头节点,然后更新头指针以指向新节点。

m0_66847953的博客 8659

gitlab远程子仓库配置SSH - 保姆级教程

在网上搜索了一些方法,但是不够详细,走了好多弯路,所以记录下配置SSH的详细过程吧。

是菠萝的博客 1万+

数据结构——单链表

在链表中,没有增容(realloc)的概念,需要插入新的数据时,直接申请(malloc)一个结点大小的空间就可以了。

zoelinkailuo的博客 1123

工业场景实战:基于YOLO与多格式标注的传送带异物检测数据集构建指南

本文详细介绍了基于YOLO与多格式标注的传送带异物检测数据集构建方法,涵盖数据采集、标注技巧(YOLO、COCO、VOC格式)、数据增强策略及实战案例。通过工业级解决方案,有效提升异物检测准确率与效率,适用于各类工业场景。

weixin_29168393的博客 464

SQL Server 内存占用高分析及解决办法(超详细)

如果想让 Sql Server 主动释放 占用并空闲的内存空间,可以设置Sql Server占用内存的上限,就会让Sql server在。如执行存储过程,自定函数时,SQL Server 需要先二进制编译再运行,编译后的结果也会缓存起来,再次调用时就无需再次编译。才会释放一点占用的内存,所以很多时候,我们会发现运行SQL Server的系统内存往往居高不下这些内存一般都。缓存,以便于再次请求此页的数据的时候,直接从内存返回,就无需读取磁盘了,大大提高了速度。最后文章有啥不对,欢迎大佬在评论区指点!

2301_79080944的博客 3953

数据结构之单链表

为方便后续修改链表数据的便利性,将int更名。

zzh_Zao的博客 1365

Mind+掌控板实战:5分钟搞定Easy IoT的MQTT通讯(附完整代码)

本文详细介绍了如何利用掌控板和Mind+图形化编程软件,快速实现基于Easy IoT平台的MQTT通讯。通过清晰的步骤讲解和完整的代码示例,指导用户完成从云端配置、Wi-Fi连接到MQTT消息发布与订阅的全过程,帮助初学者轻松构建物联网设备间的双向对话系统。

weixin_29300241的博客 451

【数据结构】单链表

数据结构中的单链表

m0_62531913的博客 1311

STC单片机使用FatFs文件系统读取SD卡指定文件内容

STC单片机使用FatFs文件系统读取SD卡指定文件内容

perseverance51博客 2746

手把手教你学simulink实例--基于Simulink的轨道交通车辆悬挂系统仿真

轨道交通车辆悬挂系统是保证列车运行平稳性、舒适性和安全性的重要组成部分。通过悬挂系统的合理设计,可以有效减小车辆在运行过程中受到的轨道不平顺和振动影响。基于MATLAB/Simulink平台进行悬挂系统仿真,可以对悬挂系统的动力学行为、控制策略以及性能优化等环节进行建模与分析,从而验证系统的设计性能并优化参数。本项目旨在构建一个完整的轨道交通车辆悬挂系统仿真模型,包括悬挂系统动力学建模、控制策略模块以及性能评估模块,并通过仿真验证系统的稳定性和舒适性。

MHD0815的博客 1034

C-数据结构之单链表逆置

11.25-学习笔记 单链表的逆置-大概思想就是新建立一个头结点,然后让之前的结点使用头插法插入到新建立的链表中。(这个也是使用快慢指针判断回文串中前半部分逆置的思想(我感觉是这样的)) //实现单链表的逆置 //逆置单链表就是新创建一个链表,然后让原始列表的每一个结点使用头插法插入到新链表中。 #include<stdio.h> #include<stdlib.h> typedef struct node{ int data; struct node * next; }Lno

nnluop的博客 7465

OCR技术解析:用Tesseract和PaddleOCR识别文本

OCR技术解析:用Tesseract和PaddleOCR识别文本 ,人工智能,计算机视觉,大模型,AI,光学字符识别(Optical Character Recognition,简称 OCR)是一项将图片、扫描件等文档中的文字信息转换为可编辑文本的技术。在数字化时代,OCR 技术广泛应用于文档处理、车牌识别、身份证识别、古籍数字化等领域,极大地提高了文字信息处理的效率。Tesseract 和 PaddleOCR 是两款极具代表性的 OCR 工具。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 3万+

数据结构—单链表

主要介绍单链表的概念和对比顺序表的优缺点,还有单链表的接口实现代码的详细解释和源代码

2301_79601095的博客 2095

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

数据结构之模拟单链表

package com.qiangqiang; import java.util.LinkedList; /** * \* Created with IntelliJ IDEA. * \* @author: xiyue * \* Date: 2020/12/29 * \* Time: 15:19 * \* To change this template use File | Settings | File Templates. * \* Description: * \ */ publi

京北游戏官方 7692

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

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

【单链表】数据结构,详解单链表,java实现代码

单链表基本操作,详解单链表

程序员良辰 2659

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

数据结构 【单链表】

‌数据域用于存储实际的数据,而指针域则存储指向下一个节点的地址。单链表的特点包括动态存储、非连续存储、易于插入和删除。节点可以定义成一个结构体,每个节点中包含一个数据和下一个节点的地址。上面的结构体定义了一个节点,节点中存放的数据类型被定义成了SLDataType类型,节点的名称叫做SLNode。

qq_70199082的博客 2625

【数据结构】单链表2

尾插、尾删、头插、头删、查找、指定位置前插/删、指定位置后插/删、销毁。希望对大家有所帮助,一起加油,一起进步!

枫の大一分享 1398

数据结构之——单链表

深入了解单链表:数据结构中的灵活利器

m0_71974552的博客 1633

数据结构之单链表——考研笔记

单链表一个节点需要存放数据元素和指向下一个节点的指针,由于每个节点只包含一个指针,所以叫单链表。单链表:改变容量方便,但不可随机存取。

weixin_73236117的博客 887
上一篇: 把内存中的数据转化成16进制显示
下一篇: Qt5开发及实例 4.9.1QPalette类
rankedthird
博客等级 码龄14年 2粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值