【数据结构与算法】链表(上)
记录自己所学,无详细讲解
无头单链表实现
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);
}
相关文章:
【数据结构与算法】链表(上)
记录自己所学,无详细讲解 无头单链表实现 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-拉取与更新代码
右键项目文件 进行更新与提交代码,提交代码选择更改的文件以及填写commit...
【C++ 算法进阶】算法提升四
数组查询问题 (数组优化) 题目 数组为 {3 , 2, 2 ,3 ,1} 查询为(0 ,3 ,2) 这个查询的意义是 在数组下标0~3这个范围上 有多少个2 (答案为2&…...
多种方式实现安全帽佩戴检测
为什么要佩戴安全帽 在探讨安全帽佩戴检测之前,我们先来了解下安全帽佩戴的必要性: 保护头部免受外力伤害 防止物体打击 在建筑施工、矿山开采、工厂车间等场所,经常会有高空坠物的风险。例如在建筑工地上,可能会有工具、材料、…...
基于PHP+MySQL+Vue的网上订餐系统
摘要 本文介绍了一个基于PHPMySQLVue技术的网上订餐系统。该系统旨在为用户提供便捷的在线订餐服务,同时提高餐厅的运营效率。系统后端采用PHP语言开发,利用MySQL数据库进行数据存储与管理,实现了用户注册登录、菜品浏览、购物车管理、订单提…...
Vue学习笔记 Class绑定 Style绑定 侦听器 表单输入绑定 模板引用 组件组成 组件嵌套关系
文章目录 Class绑定绑定对象绑定数组注意事项 style绑定绑定对象代码效果展示 绑定数组 侦听器注意的点代码效果 表单输入绑定示例代码效果展示 修饰符.lazy.number.trim 模板引用组件组成组件组成结构引入组件步骤style中的scoped作用 组件嵌套关系 Class绑定 绑定对象 绑定数…...
【AIGC】ChatGPT与人类理解力的共鸣:人机交互中的心智理论(ToM)探索
博客主页: [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯心智理论(Theory of Mind,ToM)心智理论在心理学与神经科学中的重要性心智理论对理解同理心、道德判断和社交技能的重要性结论 💯乌得勒支大学研究对ChatGPT-4…...
代码训练营 day39|0-1背包问题,LeetCode 416
前言 这里记录一下陈菜菜的刷题记录,主要应对25秋招、春招 个人背景 211CS本CUHK计算机相关硕,一年车企软件开发经验 代码能力:有待提高 常用语言:C 系列文章目录 第九章 动态规划part03 文章目录 前言系列文章目录第九章 动态…...
LeetCode 203 - 移除链表元素
题目描述 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 解题思路 创建一个虚拟头节点dummyHead,并将其next指向给定的头节点head,这样可以避免处理头节点的特…...
【海图界面上一些常见术语UTC、HDG、COG、SOG、LAT、LON的基本解释】
当然,以下是关于海图界面上一些常见术语UTC、HDG、COG、SOG、LAT、LON的基本解释: UTC (Coordinated Universal Time) 定义:UTC 是协调世界时(Coordinated Universal Time)的缩写,是一种与地球自转无关的…...
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年到现在某个中国城市的天气数据,您可以通过以下方法实现: 1. 使用第三方天气数据API 许多天气服务提供商提供了历史天气数据的API接口,您可以通过这些API获取所需的数据。以下是一些常用的天气数据API提供商: 1.1…...
【VUE】Vue中常用的修饰符
事件修饰符 .stop:阻止事件冒泡。.prevent:阻止默认事件。.capture:使用事件捕获模式。.self:只当事件在该元素本身(比如不是子元素)触发时触发回调。.once:只触发一次事件。 按键修饰符 .en…...
数据分箱:如何确定分箱的最优数量?
选择最优分箱可以考虑以下几种方法: 一、基于业务理解 分析业务背景:从业务角度出发,某些特征可能有自然的分组或区间划分。例如,年龄可以根据不同的人生阶段进行分箱,收入可以根据常见的收入等级划分。 优点&#x…...
机器学习核心功能:分类、回归、聚类与降维
机器学习核心功能:分类、回归、聚类与降维 机器学习领域的基本功能类型通常按照学习模式、预测目标和算法适用性来分类。这些类型包括监督学习、无监督学习、半监督学习和强化学习,它们可以进一步细化为特定的任务,如分类、回归、聚类和降维…...
Python爬虫-eBay商品排名数据
前言 本文是该专栏的第39篇,后面会持续分享python爬虫干货知识,记得关注。 本文以eBay为例,通过搜索目标”关键词“,获取相关搜索”关键词“的商品排名数据。废话不多说,具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。接下来,跟着笔者直接往下看正文详…...
LabVIEW提高开发效率技巧----图像处理加速
在现代工业和科研中,图像处理技术被广泛应用于质量检测、自动化控制、机器人导航等领域。然而,随着图像数据量的增加,传统的CPU处理方式可能难以满足实时性和高效处理的需求。LabVIEW通过结合NI Vision模块和FPGA硬件平台,可以显著…...
AcWing1027
题目重述: 题目的核心是找到一条路径的最大权值总和,但路径要从起点 (1, 1) 走到终点 (n, n)。由于两条路径分别经过不同的格子,我们可以巧妙地将问题简化为两次同时出发的路径问题。这种映射的设计让我们能够更方便地处理两条路径重叠在同一…...
23 Shell Script服务脚本
Linux 服务脚本 一、Linux 开机自动启动服务 linux开机服务原理: ①linux系统启动首先加载kernel ②初始操作系统 ③login验证程序等待用户登陆 初始化操作系统 kernel加载/sbin/init创建用户空间的第一个程序 该程序完成操作系统的初…...
图片旋转判断在智能相册中的创新应用
图片旋转判断在智能相册中的创新应用 1. 引言 你有没有遇到过这样的情况?翻看手机相册时,发现有些照片莫名其妙地歪了,需要手动一张张旋转校正。特别是那些横屏拍摄的照片,在手机竖屏查看时总是需要歪着头看,体验特别…...
PowerPaint-V1应用技巧:用Seed值固定最佳效果,批量修图必备
PowerPaint-V1应用技巧:用Seed值固定最佳效果,批量修图必备 1. 为什么Seed值对批量修图如此重要? 想象一下这样的场景:你刚用PowerPaint-V1完美修复了一张产品图,接着想用同样的参数处理同系列的20张图片。但每次点击…...
HWA05_leetcode48旋转图像
题目解法class Solution:def rotate(self, matrix: List[List[int]]) -> None:"""Do not return anything, modify matrix in-place instead."""#这是一个n行n列的矩阵n len(matrix)#只需要遍历n/2行for i in range(n//2):#每一列从i开始直到…...
Qwen3-ForcedAligner-0.6B多语言支持实测:52种语言自动检测与对齐能力
Qwen3-ForcedAligner-0.6B多语言支持实测:52种语言自动检测与对齐能力 1. 引言:音文对齐的实用价值 你有没有遇到过这样的场景:手里有一段音频和对应的文字稿,需要精确知道每个词在音频中的具体时间位置?传统方法需要…...
实测Sonic数字人:上传自拍和录音,生成专属虚拟形象视频(效果超赞)
实测Sonic数字人:上传自拍和录音,生成专属虚拟形象视频(效果超赞) 1. 引言:数字人视频制作新体验 1.1 传统视频制作的痛点 制作专业级人物视频通常需要昂贵的设备、复杂的3D建模和专业的后期制作。对于普通用户来说…...
【成本管理】信息系统项目管理师论文范文
#信息系统项目管理师论文写作要求 信息系统项目管理师论文项目成本管理范文,范文仅供参考。...
Ostrakon-VL-8B在教育领域的应用:实现AI驱动的自动化作业批改与反馈
Ostrakon-VL-8B在教育领域的应用:实现AI驱动的自动化作业批改与反馈 1. 引言 想象一下,一位中学数学老师,晚上十点还在台灯下批改着两个班级、近百份的作业。每一份作业都需要仔细检查解题步骤是否正确、逻辑是否清晰、答案是否准确。这不仅…...
OpenClaw安全防护指南:Kimi-VL-A3B-Thinking本地化部署最佳实践
OpenClaw安全防护指南:Kimi-VL-A3B-Thinking本地化部署最佳实践 1. 为什么需要特别关注OpenClaw的安全配置? 去年夏天,我在整理公司财报时突发奇想:能不能让AI助手帮我自动生成分析图表?当我看着OpenClaw的鼠标指针在…...
ESP32S3变身HID设备:用esp-iot-solution实现USB键盘鼠标(附常见编译错误修复)
ESP32S3实战:基于esp-iot-solution打造高响应USB HID设备的全流程指南 当ESP32S3遇上USB HID协议,开发者手中的这块开发板瞬间化身为键盘鼠标模拟利器。不同于市面上简单的教程,本文将带您深入esp-iot-solution框架的核心,从环境搭…...
OpenClaw故障排查大全:Qwen3-14B接口调用失败解决方案
OpenClaw故障排查大全:Qwen3-14B接口调用失败解决方案 1. 前言:为什么需要这份指南 上周我在本地部署OpenClaw对接Qwen3-14B模型时,连续遭遇了三次不同原因的接口调用失败。从网关超时到模型响应异常,每次错误都让我花费数小时查…...
