《C++》解密--单链表

《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; while (pcur) { printf("%d->", pcur->data); pcur = pcur->next; } printf("NULL\n"); }
【test.c】
//创建一个链表,并且打印链表 void createSList() { SLTNode* node1 = (SLTNode*)malloc(sizeof(SLTNode)); node1->data = 1; SLTNode* node2 = (SLTNode*)malloc(sizeof(SLTNode)); node1->data = 2; SLTNode* node3 = (SLTNode*)malloc(sizeof(SLTNode)); node1->data = 3; SLTNode* node4 = (SLTNode*)malloc(sizeof(SLTNode)); node1->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、头插

Read more

在Kali Linux上使用PHPStudy一站式搭建DVWA靶场(附详细排错&命令解释)

在Kali Linux上使用PHPStudy一站式搭建DVWA靶场(附详细排错&命令解释)

目录 1. 安装phpstudy集成环境 a. 从网站下载脚本文件,并命名未install.sh b. 执行下载的shell文件 c. 登录面板并安装基础套件 2. 获取DVWA源码 a. 找到PHPstudy的网站根目录 b. 进入网站根目录 为什么是web? c. 下载DVWA源码到网站根目录 3. 配置DVWA数据库连接 a. (上面修改配置失败惹,,下面这个方法可以 4. 启动服务与部署 5. 初始化与登录 小彩蛋! 1. 安装phpstudy集成环境 a. 从网站下载脚本文件,并命名为install.sh 打开终端命令行,输入“wget -O install.sh https://notdocker.xp.cn/install.sh”并回车: 命令片段

By Ne0inhk

AI大模型实用(三)Java快速实现智能体整理(Springboot+LangChain4j)

目录 1.1 简介 1.2 示例 步骤一: 添加pom 步骤二:配置 步骤三:流式输出 步骤四: 正常输出 步骤五: 【类似函数调用】AI Service接口 1.3 调试问题 问题1: ClassNotFoundException: dev.langchain4j.exception.IllegalConfigurationException 问题2: overriding is disabled 问题3 :dev.langchain4j.exception.IllegalConfigurationException 1.4  langchain4j与springAI对比 1.1 简介 一个基于 Java 的库,旨在简化自然语言处理(NLP)和大型语言模型(LLM)

By Ne0inhk
2G 内存云服务器部署 Spring Boot + MySQL 实战:从踩坑到上线

2G 内存云服务器部署 Spring Boot + MySQL 实战:从踩坑到上线

2G 内存云服务器部署 Spring Boot + MySQL 实战:从踩坑到上线 前言 最近把自己的全栈博客项目部署到了腾讯云的入门级服务器(2核2G),过程中踩了不少坑。本文记录完整的部署过程和问题排查思路,希望对同样在小规格服务器上部署 Java 项目的同学有所帮助。 项目技术栈: * 后端:Java 17 + Spring Boot 3.2.3 + Spring Security + JPA * 数据库:MySQL 8.0 * 前端:Flutter Web * 反向代理:Nginx 1.26 * 容器:Docker 28.4 服务器配置: * 腾讯云轻量应用服务器 * 2 核 CPU / 2GB 内存 / 50GB

By Ne0inhk
阿里开源Qwen3.5:混合线性注意力让推理速度提升19倍,这个架构选择值得深挖.md

阿里开源Qwen3.5:混合线性注意力让推理速度提升19倍,这个架构选择值得深挖.md

文章目录 * 1、前言 * 2、Qwen3.5 是什么 * 2.1 一句话定位 * 2.2 与 Qwen3 的关键区别 * 2.3 发布时间线 * 3、快速上手 * 3.1 API 调用(阿里云百炼) * 3.2 开源版本部署 * 3.3 推荐采样参数 * 4、五大核心特性详解 * 4.1 混合注意力架构:线性 + 全注意力 3:1 * 4.2 原生多模态:不再是"插件" * 4.3 百万

By Ne0inhk