跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

C++ 单链表概念与结构详解

C++ 单链表的基本概念、节点结构及物理逻辑特性,详细演示了如何定义链表结构、创建节点、打印链表以及尾插操作。代码示例展示了内存分配、指针操作及测试流程,修正了原有代码中的赋值错误,帮助读者理解单链表的实现原理。

SparkGeek发布于 2026/3/26更新于 2026/10/2196 浏览
C++ 单链表概念与结构详解

一、概念与结构

1、节点

结点的组成主要有:当前结点要保存的数据和保存下一个节点的地址(指针变量)

文章配图

图中指针变量 plist 保存的是第一个结点的地址,我们称 plist 此时'指向'第一个结点。

链表中每个结点都是独立申请的(如果需要插入数据时才去申请一块结点的空间),我们需要通过指针变量来保存下一个结点位置才能从当前结点找到下一个结点。

文章配图

2、链表的性质

【链表结构在逻辑上是连续的,在物理结构上不一定连续。

【结点一般是从堆上申请的。

【从堆上申请来的空间,是按照一定策略分配出来的,每次申请的空间可能连续,可能不连续。

二、实现单链表

1、创立文件

文章配图

2、定义链表的结构
【SList.h】
//定义链表 (结点) 的位置 
typedef int SLTDataType; 
typedef struct SListNode { 
    SLTDataType data; 
    struct SListNode* next; 
}SLTNode; 
void SLTPrint(SLTNode* phead);
3、打印函数
【SList.h】
//打印函数 void SLTPrint(SLTNode* phead);
【SList.c】
//打印函数 void SLTPrint(SLTNode* phead) { 
    SLTNode* pcur = phead; 
     (pcur) { 
        (, pcur->data); 
        pcur = pcur->next; 
    } 
    (); 
}
while
printf
"%d->"
printf
"NULL\n"
【test.c】
//创建一个链表,并且打印链表 void createSList() { 
    SLTNode* node1 = (SLTNode*)malloc(sizeof(SLTNode)); 
    node1->data = 1; 
    SLTNode* node2 = (SLTNode*)malloc(sizeof(SLTNode)); 
    node2->data = 2; 
    SLTNode* node3 = (SLTNode*)malloc(sizeof(SLTNode)); 
    node3->data = 3; 
    SLTNode* node4 = (SLTNode*)malloc(sizeof(SLTNode)); 
    node4->data = 4; 
    node1->next = node2; 
    node2->next = node3; 
    node3->next = node4; 
    node4->next = NULL; //第一个结点的地址作为参数传递过去 
    SLTNode* plist = node1; 
    SLTPrint(node1); 
}
4、判断插入时,空间是否足够
【SList.c】
//判断插入数据时,空间是否足够 SLTNode* SLTBuyNode(SLTDataType x) { 
    SLTNode* node = (SLTNode*)malloc(sizeof(SLTNode)); 
    if (node == NULL) { 
        perror("malloc fail!"); 
        exit(1); 
    } 
    node->data = x; 
    node->next = NULL; 
    return node; 
}
5、尾插
【SList.h】
//尾插 void SLTPushBack(SLTNode** pphead,SLTDataType x);
【SList.c】
//尾插 void SLTPushBack(SLTNode** pphead, SLTDataType x) { 
    assert(pphead); //形参:pphead --> 实参:&plist //*pphead 解引用 --> plist //申请新结点 
    SLTNode* newnode = SLTBuyNode(x); 
    //判断是否有足够空间 
    if (*pphead == NULL) { 
        *pphead = newnode; 
    } else { 
        //尾节点 --> 新结点 //找尾节点 
        SLTNode* ptail = *pphead; 
        while (ptail->next) { 
            ptail = ptail->next; 
        } 
        //ptail --> newnode 
        ptail->next = newnode; 
    } 
}
【test.c】
void SListTest01() { 
    SLTNode* plist = NULL; 
    SLTPushBack(&plist, 1); 
    SLTPrint(plist); //1->NULL 
    SLTPushBack(&plist, 2); 
    SLTPrint(plist); //1->2->NULL 
    SLTPushBack(&plist, 3); 
    SLTPrint(plist); //1->2->3->NULL 
    SLTPushBack(&plist, 4); 
    SLTPrint(plist); //1->2->3->4->NULL 
}
【运行结果】

文章配图

6、头插

目录

  1. 一、概念与结构
  2. 1、节点
  3. 2、链表的性质
  4. 二、实现单链表
  5. 1、创立文件
  6. 2、定义链表的结构
  7. 【SList.h】
  8. 3、打印函数
  9. 【SList.h】
  10. 【SList.c】
  11. 【test.c】
  12. 4、判断插入时,空间是否足够
  13. 【SList.c】
  14. 5、尾插
  15. 【SList.h】
  16. 【SList.c】
  17. 【test.c】
  18. 【运行结果】
  19. 6、头插

更多推荐文章

查看全部
  • LLM 三角原则解析:简化大模型应用开发的核心指南
  • Rio:用纯 Python 开发现代 Web 和桌面应用的 UI 框架
  • 基于 Java 的建筑全生命周期碳排放计算与管理平台
  • 昇腾 NPU 部署 Llama 大模型:全流程实战与常见问题排查
  • Flink 基础知识:简介、核心架构、API 及集群部署详解
  • AI 上下文优化实战:解决过载与不足的平衡之道
  • 专利 CN118134841A:光伏产品缺陷检测 AI 深度学习算法解析
  • PyTorch 安装指南:环境配置与常见问题解决
  • VS Code 中 GitHub 扩展登录报错:尚未完成授权此扩展使用 GitHub 的操作
  • Kotlin Lambda 编程:序列、Java 函数式接口与 with/apply 函数
  • 如何免费使用 AI 绘画模型 Nano Banana Pro
  • GraphQL在Python中的实现:从基础到企业级实战
  • 电商 AI 绘画:精准提示词撰写与实战案例指南
  • 二级 Python 考试基本操作题真题及参考代码解析
  • 角点检测算法:Harris 和 FAST 方法
  • ROS2 + Gazebo + PX4 环境搭建与无人机起飞实战
  • VSCode 精准禁用 Copilot:按语言与场景灵活配置
  • MySQL 8.4 Windows 压缩包安装配置指南
  • Jetpack Compose 入门到实战:核心特性与迁移思路
  • 滑动窗口算法详解与 LeetCode 高频题目解题模板

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online