当前位置: 首页 > news >正文

【数据结构与算法】链表(上)

记录自己所学,无详细讲解

无头单链表实现

1.项目目录文件

2.头文件 Slist.h

#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
struct Slist
{int data;struct Slist* next;
};
typedef struct Slist Slist;
//初始化
void SlistInit(Slist** phead);
//新建一个节点
Slist* Buynode(int n);
//尾插
void SlistPushback(Slist** phead, int n);
//头插
void SlistPushfront(Slist** phead, int n);
//尾删
void SlistPopback(Slist** phead);
//头删
void SlistPopfront(Slist** phead);
//查询是否存在
Slist* IsFind(Slist** phead, int n);
// 修改某个节点
void SlistModify(Slist* pos, int n);
// 删除某个节点
void SlistDel(Slist**phead, Slist* pos);
//某个节点前插入
void SlistInsertfront(Slist** phead, Slist* pos, int n);
//某个节点后插入
void SlistInsertback(Slist** phead, Slist* pos, int n);
//销毁单链表
void SlistDestory(Slist** phead);
//打印
void SlistPrint(Slist** phead);

 3.函数定义源文件 Slist.c

#include "Slist.h"
void SlistInit(Slist** phead)
{*phead = NULL;//(*phead)->next = NULL;
}
Slist* Buynode(int n)
{Slist* newnode = (Slist*)malloc(sizeof(Slist));assert(newnode);newnode->next = NULL;newnode->data = n;return newnode;
}
void SlistPushback(Slist** phead, int n)
{Slist* newnode = Buynode(n);if (*phead == NULL){*phead = Buynode(n);printf("%d尾插成功\n", (*phead)->data);}else{Slist* cur = *phead;while (cur->next!=NULL){cur = cur->next;}cur->next = newnode;printf("%d尾插成功\n", (newnode)->data);}
}
void SlistPushfront(Slist** phead, int n)
{Slist* newnode = Buynode(n);if (*phead == NULL){*phead = newnode;printf("%d头插成功\n", (*phead)->data);}else{newnode->next = *phead;*phead = newnode;printf("%d头插成功\n", (*phead)->data);}
}
void SlistPopback(Slist** phead)
{assert(*phead);Slist* cur = *phead;if ((*phead)->next == NULL){printf("%d尾删成功\n",(*phead)->data);free(*phead);*phead = NULL;}else{while ((cur->next)->next != NULL){cur = cur->next;}printf("%d尾删成功\n", (cur->next)->data);free(cur->next);cur->next = NULL;}
}
void SlistPopfront(Slist** phead)
{assert(*phead);printf("%d头删成功\n", (*phead)->data);Slist* cur = *phead;*phead = (*phead)->next;free(cur);cur = NULL;
}
Slist* IsFind(Slist** phead,int n)
{assert(*phead);Slist* cur = *phead;while (cur != NULL){if (cur->data == n){return cur;}cur = cur->next;}return NULL;
}
void SlistModify(Slist* pos, int n)
{if (pos == NULL){printf("修改失败,未找到节点\n");}else{pos->data = n;printf("修改成功\n");}
}
void SlistDel(Slist** phead,Slist* pos)
{assert(*phead);if (pos == NULL){printf("删除失败,未找到节点\n");}else if (*phead == pos){Slist* cur = *phead;*phead = (*phead)->next;free(cur);cur = NULL;printf("删除节点成功\n");}else{Slist* cur = *phead;while (cur->next!= pos){cur = cur->next;}cur->next = pos->next;free(pos);pos = NULL;printf("删除节点成功\n");}
}
void SlistInsertfront(Slist** phead, Slist* pos, int n)
{assert(*phead);Slist* newnode = Buynode(n);Slist* cur = *phead;if (pos == NULL){printf("插入失败,未找到节点\n");}else if (cur->next == NULL){newnode->next = cur;*phead = newnode;printf("插入成功\n");}else if (cur == pos){*phead = newnode;newnode->next = cur;printf("插入成功\n");}else{while (cur->next != pos){cur = cur->next;}cur->next = newnode;newnode->next = pos;printf("插入成功\n");}
}
void SlistInsertback(Slist** phead, Slist* pos,int n)
{assert(*phead);Slist* newnode = Buynode(n);Slist* cur = *phead;if (pos == NULL){printf("插入失败,未找到节点\n");}else{while (cur != pos){cur = cur->next;}Slist* ccur = cur->next;cur->next = newnode;newnode->next = ccur;printf("插入成功\n");}
}
void SlistDestory(Slist** phead)
{Slist* cur = *phead;Slist* ccur = cur;while (cur != NULL){ccur = cur;cur = cur->next;free(ccur);ccur = NULL;}*phead = NULL;
}
void SlistPrint(Slist** phead)
{assert(*phead);Slist* cur = *phead;while (cur != NULL){printf("%3d", cur->data);cur = cur->next;}
}

4.函数调用测试源文件test.c

#include "Slist.h"
int main()
{Slist * list;SlistInit(&list);SlistPushback(&list, 5);SlistPushback(&list, 4);SlistPushback(&list, 3);SlistPushback(&list, 2);SlistPushback(&list, 1);SlistPushfront(&list,6);SlistPushfront(&list,7);//SlistPopback(&list);//SlistPopback(&list);//SlistPopfront(&list);//SlistDel(&list,IsFind(&list, 1));//SlistModify(IsFind(&list, 10), 9);SlistInsertfront(&list, IsFind(&list, 7), 8);SlistInsertback(&list, IsFind(&list, 8), 10);//SlistPrint(&list);SlistDestory(&list);SlistPrint(&list);
}

相关文章:

【数据结构与算法】链表(上)

记录自己所学&#xff0c;无详细讲解 无头单链表实现 1.项目目录文件 2.头文件 Slist.h #include <stdio.h> #include <assert.h> #include <stdlib.h> struct Slist {int data;struct Slist* next; }; typedef struct Slist Slist; //初始化 void SlistI…...

svn-拉取与更新代码

右键项目文件 进行更新与提交代码&#xff0c;提交代码选择更改的文件以及填写commit...

【C++ 算法进阶】算法提升四

数组查询问题 &#xff08;数组优化&#xff09; 题目 数组为 {3 &#xff0c; 2&#xff0c; 2 &#xff0c;3 &#xff0c;1} 查询为&#xff08;0 &#xff0c;3 &#xff0c;2&#xff09; 这个查询的意义是 在数组下标0~3这个范围上 有多少个2 &#xff08;答案为2&…...

多种方式实现安全帽佩戴检测

为什么要佩戴安全帽 在探讨安全帽佩戴检测之前&#xff0c;我们先来了解下安全帽佩戴的必要性&#xff1a; 保护头部免受外力伤害 防止物体打击 在建筑施工、矿山开采、工厂车间等场所&#xff0c;经常会有高空坠物的风险。例如在建筑工地上&#xff0c;可能会有工具、材料、…...

基于PHP+MySQL+Vue的网上订餐系统

摘要 本文介绍了一个基于PHPMySQLVue技术的网上订餐系统。该系统旨在为用户提供便捷的在线订餐服务&#xff0c;同时提高餐厅的运营效率。系统后端采用PHP语言开发&#xff0c;利用MySQL数据库进行数据存储与管理&#xff0c;实现了用户注册登录、菜品浏览、购物车管理、订单提…...

Vue学习笔记 Class绑定 Style绑定 侦听器 表单输入绑定 模板引用 组件组成 组件嵌套关系

文章目录 Class绑定绑定对象绑定数组注意事项 style绑定绑定对象代码效果展示 绑定数组 侦听器注意的点代码效果 表单输入绑定示例代码效果展示 修饰符.lazy.number.trim 模板引用组件组成组件组成结构引入组件步骤style中的scoped作用 组件嵌套关系 Class绑定 绑定对象 绑定数…...

【AIGC】ChatGPT与人类理解力的共鸣:人机交互中的心智理论(ToM)探索

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;心智理论(Theory of Mind,ToM)心智理论在心理学与神经科学中的重要性心智理论对理解同理心、道德判断和社交技能的重要性结论 &#x1f4af;乌得勒支大学研究对ChatGPT-4…...

代码训练营 day39|0-1背包问题,LeetCode 416

前言 这里记录一下陈菜菜的刷题记录&#xff0c;主要应对25秋招、春招 个人背景 211CS本CUHK计算机相关硕&#xff0c;一年车企软件开发经验 代码能力&#xff1a;有待提高 常用语言&#xff1a;C 系列文章目录 第九章 动态规划part03 文章目录 前言系列文章目录第九章 动态…...

LeetCode 203 - 移除链表元素

题目描述 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 解题思路 创建一个虚拟头节点dummyHead&#xff0c;并将其next指向给定的头节点head&#xff0c;这样可以避免处理头节点的特…...

【海图界面上一些常见术语UTC、HDG、COG、SOG、LAT、LON的基本解释】

当然&#xff0c;以下是关于海图界面上一些常见术语UTC、HDG、COG、SOG、LAT、LON的基本解释&#xff1a; UTC (Coordinated Universal Time) 定义&#xff1a;UTC 是协调世界时&#xff08;Coordinated Universal Time&#xff09;的缩写&#xff0c;是一种与地球自转无关的…...

HL7协议简介及其在STM32上的解析实现

近期完成一个医疗相关的项目,其中包括了体征监测设备,该设备使用的通信协议便是HL7 V2.4 协议,在医疗信息化领域,HL7(Health Level Seven)协议扮演着至关重要的角色。它是一种国际标准,用于定义医疗机构间以及医疗设备与信息系统之间的数据交换格式和通信协议。HL7标准旨…...

TensorRT推理端到端

TensorRT推理端到端 1.参考链接2.宿主机上安装CUDA 12.4.13.安装nvidia-container-toolkit4.创建ghcr.io/intel/llvm/ubuntu2204_base容器5.容器内安装CUDA 12.4.1 + TensorRT10.1.06.安装依赖7.准备resnet50模型8.准备bert模型9.准备yolov5m模型10.编译TensorRT推理程序11.onn…...

获取历史的天气预报数据的网站

要获取从2019年到现在某个中国城市的天气数据&#xff0c;您可以通过以下方法实现&#xff1a; 1. 使用第三方天气数据API 许多天气服务提供商提供了历史天气数据的API接口&#xff0c;您可以通过这些API获取所需的数据。以下是一些常用的天气数据API提供商&#xff1a; 1.1…...

【VUE】Vue中常用的修饰符

事件修饰符 .stop&#xff1a;阻止事件冒泡。.prevent&#xff1a;阻止默认事件。.capture&#xff1a;使用事件捕获模式。.self&#xff1a;只当事件在该元素本身&#xff08;比如不是子元素&#xff09;触发时触发回调。.once&#xff1a;只触发一次事件。 按键修饰符 .en…...

数据分箱:如何确定分箱的最优数量?

选择最优分箱可以考虑以下几种方法&#xff1a; 一、基于业务理解 分析业务背景&#xff1a;从业务角度出发&#xff0c;某些特征可能有自然的分组或区间划分。例如&#xff0c;年龄可以根据不同的人生阶段进行分箱&#xff0c;收入可以根据常见的收入等级划分。 优点&#x…...

机器学习核心功能:分类、回归、聚类与降维

机器学习核心功能&#xff1a;分类、回归、聚类与降维 机器学习领域的基本功能类型通常按照学习模式、预测目标和算法适用性来分类。这些类型包括监督学习、无监督学习、半监督学习和强化学习&#xff0c;它们可以进一步细化为特定的任务&#xff0c;如分类、回归、聚类和降维…...

Python爬虫-eBay商品排名数据

前言 本文是该专栏的第39篇,后面会持续分享python爬虫干货知识,记得关注。 本文以eBay为例,通过搜索目标”关键词“,获取相关搜索”关键词“的商品排名数据。废话不多说,具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。接下来,跟着笔者直接往下看正文详…...

LabVIEW提高开发效率技巧----图像处理加速

在现代工业和科研中&#xff0c;图像处理技术被广泛应用于质量检测、自动化控制、机器人导航等领域。然而&#xff0c;随着图像数据量的增加&#xff0c;传统的CPU处理方式可能难以满足实时性和高效处理的需求。LabVIEW通过结合NI Vision模块和FPGA硬件平台&#xff0c;可以显著…...

AcWing1027

题目重述&#xff1a; 题目的核心是找到一条路径的最大权值总和&#xff0c;但路径要从起点 (1, 1) 走到终点 (n, n)。由于两条路径分别经过不同的格子&#xff0c;我们可以巧妙地将问题简化为两次同时出发的路径问题。这种映射的设计让我们能够更方便地处理两条路径重叠在同一…...

23 Shell Script服务脚本

Linux 服务脚本 一、Linux 开机自动启动服务 ​ linux开机服务原理&#xff1a; ​ ①linux系统启动首先加载kernel ​ ②初始操作系统 ​ ③login验证程序等待用户登陆 ​ 初始化操作系统 ​ kernel加载/sbin/init创建用户空间的第一个程序 ​ 该程序完成操作系统的初…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

自然语言处理——文本分类

文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益&#xff08;IG&#xff09; 分类器设计贝叶斯理论&#xff1a;线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别&#xff0c; 有单标签多类别文本分类和多…...