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

数据结构单链表的实现(C语言)

目录

  • 1.实现的接口和功能
  • 2.代码块

1.实现的接口和功能

//打印链表
void SLTPrint(SLTNode** phead);
//头插
void PushFont(SLTNode** phead, SLTDataType x);
//尾插
void PushBack(SLTNode** phead, SLTDataType x);
//头删
void PopFont(SLTNode** phead);
//尾删
void PopBack(SLTNode** phead);
//删除链表
void Destory(SLTNode** phead);
//创建一个结点
SLTNode* Create(SLTDataType x);
//查找x的结点
SLTNode* Find(SLTNode** phead,SLTDataType x);
//查找指定结点并删除
void FindDele(SLTNode** phead, SLTDataType x);
//删除指定结点的下一个结点
void Delenext(SLTNode** phead, SLTDataType* pos);
//删除指定结点的上一个结点
void DeleAfter(SLTNode** phead, SLTDataType* pos);

2.代码块

声明代码:

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef int SLTDataType;
typedef struct SListNode
{SLTDataType data;struct SListNode* next;
}SLTNode;
//打印链表
void SLTPrint(SLTNode** phead);
//头插
void PushFont(SLTNode** phead, SLTDataType x);
//尾插
void PushBack(SLTNode** phead, SLTDataType x);
//头删
void PopFont(SLTNode** phead);
//尾删
void PopBack(SLTNode** phead);
//删除链表
void Destory(SLTNode** phead);
//创建一个结点
SLTNode* Create(SLTDataType x);
//查找x的结点
SLTNode* Find(SLTNode** phead,SLTDataType x);
//查找指定结点并删除
void FindDele(SLTNode** phead, SLTDataType x);
//删除指定结点的下一个结点
void Delenext(SLTNode** phead, SLTDataType* pos);
//删除指定结点的上一个结点
void DeleAfter(SLTNode** phead, SLTDataType* pos);

实现代码:

#include"SList.h"
SLTNode* Create(SLTDataType x)
{SLTNode* list = (SLTNode*)malloc(sizeof(SLTNode));if (list == NULL){perror("malloc fail\n");}list->next = NULL;list->data = x;return list;
}
void SLTPrint(SLTNode** phead)
{assert(*phead);SLTNode* list = *phead;while (list){printf("%d ", list->data);list = list->next;}printf("\n");
}
void PushFont(SLTNode** phead, SLTDataType x)
{SLTNode* p = Create(x);if (*phead == NULL){*phead = p;}else{p->next = *phead;*phead = p;}}
void PushBack(SLTNode** phead, SLTDataType x)
{SLTNode* p = Create(x);if (*phead == NULL){*phead = p;}SLTNode* prev = NULL;SLTNode* ps = *phead;while (ps){prev = ps;ps = ps->next;}prev->next = p;}
void PopFont(SLTNode** phead)
{assert(*phead);SLTNode* p = (*phead)->next;free(*phead);*phead = p;
}
void PopBack(SLTNode** phead)
{assert(*phead);if ((*phead)->next == NULL){free(*phead);*phead = NULL;}SLTNode* p = *phead;SLTNode* prev = NULL;while (p->next){prev = p;p = p->next;}free(p);prev->next = NULL;
}
SLTNode* Find(SLTNode** phead, SLTDataType x)
{assert(*phead);SLTNode* p = *phead;while (p->data!=x){p = p->next;}if (p->data == x)return p;elsereturn NULL;
}
void FindDele(SLTNode** phead, SLTDataType x)
{assert(*phead);SLTNode* p = *phead; SLTNode* prev = NULL;while (p!=NULL&&p->data!=x){  prev = p;p = p->next;}if (p->data == x){prev->next = p->next;free(p);}}
void Destory(SLTNode** phead)
{assert(*phead);SLTNode* later = NULL;SLTNode *p= *phead;while (p){later = p->next;free(p);p = later;}
}
void Delenext(SLTNode** phead, SLTDataType* pos)
{assert(phead);SLTNode* p = *phead;while (p != pos){p = p->next;}if (p->next == NULL){return;}SLTNode* ps = p->next;p->next = p->next->next;free(ps);
}
void DeleAfter(SLTNode** phead, SLTDataType* pos)
{assert(phead);assert(&phead);if ((*phead)->next == NULL){return;}SLTNode* p = *phead;SLTNode* prev = NULL;while (p->next!= pos){prev = p;p = p->next;}if (prev == NULL){*phead = p->next;return;}prev->next = p->next;free(p);
}

测试用例代码:

#include"SList.h"
int main()
{SLTNode* list = NULL;PushFont(&list,1);PushFont(&list, 2);PushFont(&list, 3);PushBack(&list,4);PushBack(&list, 5);PushBack(&list, 6);SLTPrint(&list);PopFont(&list);PopBack(&list);SLTPrint(&list);FindDele(&list, 5);SLTNode*p= Find(&list,4);SLTNode* ps = Find(&list, 1);Delenext(&list,p);SLTPrint(&list);DeleAfter(&list, ps);SLTPrint(&list);Destory(&list);return 0;
}

结尾:今天的分享到此结束,喜欢的朋友如果感觉有帮助可以点赞三连支持,咱们共同进步!

相关文章:

数据结构单链表的实现(C语言)

目录 1.实现的接口和功能2.代码块 1.实现的接口和功能 //打印链表 void SLTPrint(SLTNode** phead); //头插 void PushFont(SLTNode** phead, SLTDataType x); //尾插 void PushBack(SLTNode** phead, SLTDataType x); //头删 void PopFont(SLTNode** phead); //尾删 void Pop…...

Postman的高级使用,傻瓜式学习【下】

目录 前言 1、全局变量、环境变量 1.1、概念&#xff1a; 1.2、如何设置全局变量、环境变量 1.3、获取全局变量、环境变量 1.4、案例1&#xff1a;手动设置变量&#xff0c;请求参数获取 1.5、案例2&#xff1a;代码设置变量&#xff0c;代码获取变量 2、Postman读取外部…...

Qt:关闭对话框,动画实现窗体逐渐缩小到消失

关键技术&#xff1a; 1、使用QPropertyAnimation对象&#xff0c;实现动画效果&#xff0c;逐渐缩小窗体尺寸&#xff0c;以及透明度&#xff1b; 2、在对话框缩小时&#xff0c;要将界面中的控件都隐藏起来&#xff0c;并且将对话框布局的Margin修改成0 代码如下&#xff…...

在Windows上 ciphey安装(详细版)

文章目录 前言 一、不想卸载原有的python版本&#xff1f; 二、安装步骤 1.安装python 2.创建虚拟环境vnev 3.在ciphey的虚拟环境中进行激活 4.安装ciphey 三、参数列表 总结 前言 提示&#xff1a;安装了好几次&#xff0c;但是都没安装成功&#xff0c;我使用了三个电脑p…...

【lesson2】数据库的库操作

文章目录 库操作创建数据库删除数据库字符集和校验规则手动设置字符集和校验集不同字符集和校验集之间的区别修改数据库字符集和校验集备份和恢复数据库 库操作 创建数据库 删除数据库 字符集和校验规则 创建数据库的时候&#xff0c;有两个编码集&#xff1a; 1.数据库编码集…...

Android Studio Giraffe解决gradle reload failed问题

settings.gradle.kts中 pluginManagement {repositories {google()mavenCentral()gradlePluginPortal()} } dependencyResolutionManagement {repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories {google()mavenCentral()} } 各增加三行内容&#x…...

刷题笔记day06-哈希表

242.有效的字母异位词 // 思路2&#xff1a;排序后在比较是否相等import ("sort""fmt""io""strings""os" )func isAnagram(s string, t string) bool {s1, s2 : []byte(s), []byte(t)// 从小到大排序sort.Slice(s1, func(i…...

springboot项目中如何实现过滤器鉴权

通常来说鉴权都是写在网关当中&#xff0c;对于单体应用也可以在后台服务中通过一个过滤器实现。其实过程与网关当中的没什么不同&#xff0c;只是在gateway当中目前是基于netty响应式的。过程如下&#xff1a; 一、实现Filter接口 定义自己的过滤器&#xff0c;并且实现Filt…...

【rust/esp32】在idf中使用embedded-graphics控制st7789 LCD屏幕

文章目录 说在前面模块详情准备工作开始编译烧录结果 说在前面 esp32版本&#xff1a;s3运行环境&#xff1a;esp-idf(std)开发环境&#xff1a;wsl2LCD模块&#xff1a;ST7789V2 240*280 LCDgithub地址&#xff1a;这里 模块详情 某宙的esp32s3开发板 某雪的1.69inch LCD模块…...

YOLOv8如何添加注意力模块?

分为两种&#xff1a;有参注意力和无参注意力。 eg: 有参&#xff1a; import torch from torch import nnclass EMA(nn.Module):def __init__(self, channels, factor8):super(EMA, self).__init__()self.groups factorassert channels // self.groups > 0self.softmax …...

用LibreOffice在excel中画折线图

数据表格如下。假设想以x列为横坐标&#xff0c;y1和y2列分别为纵坐标画折线图。 选择插入-》图表&#xff1a; 选择折线图-》点和线&#xff0c;然后点击“下一步”&#xff1a; 选择&#xff1a;列中包含数据序列&#xff0c;然后点击完成&#xff08;因为图挡住了数据…...

RabbitMQ 链接管理-发布者-消费者

RabbitMQ连接管理器 using RabbitMQ.Client; using System; public class RabbitMQConnectionManager { private readonly IConnectionFactory _connectionFactory; private IConnection _connection; public RabbitMQConnectionManager(string hostName) { …...

JAVA中的垃圾回收器(3)----ZGC

一)ZGC介绍:是JAVA11新引入的低延迟垃圾收集器 ZGC是一款基于Regin的&#xff0c;暂时没有分代概念的&#xff0c;使用了读屏障&#xff0c;颜色指针等技术来实现并发的标记清除和标记整理算法&#xff0c;一低延迟为主要目标的一款垃圾回收器 ZGC的regin可以分为是下图中具有大…...

IDEA 如何运行 SpringBoot 项目

步骤一&#xff1a;配置 Maven 第一步&#xff1a;用 IDEA 打开项目&#xff0c;准备配置 maven 环境 &#xff0c;当然如果本地没有提前配置好 maven&#xff0c;就用 IDEA 默认的配置即可 配置 maven 步骤 情况 1&#xff1a;如果本地没有配置过 maven&#xff0c;可以保持如…...

Linux MeterSphere测试平台远程访问你不会?来试试这篇文章

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《粉丝福利》 《C语言进阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 前言1. 安装MeterSphere2. 本地访问MeterSphere3. 安装 cpolar内网穿透软件4. 配置MeterSphere公网访问地址5. 公网…...

15.k8s集群防火墙配置

防火墙配置 ######################## # master节点防火墙设置 ######################### 所有master节点开放相关防火墙端口 $ firewall-cmd --zonepublic --add-port6443/tcp --permanent $ firewall-cmd --zonepublic --add-port2379-2380/tcp --permanent $ firewall-cmd…...

Python beautifulsoup网络抓取和解析cnblog首页帖子数据

视频版教程&#xff1a;一天掌握python爬虫【基础篇】 涵盖 requests、beautifulsoup、selenium 我们抓取下https://www.cnblogs.com/ 首页所有的帖子信息&#xff0c;包括帖子标题&#xff0c;帖子地址&#xff0c;以及帖子作者信息。 首先用requests获取网页文件&#xff0…...

Java集成腾讯云OCR身份证识别接口

一、背景 项目用到身份证识别获取人员信息的功能&#xff0c;于是想到了腾讯云提供这样的API。在整合代码过程都很顺利&#xff0c;利用腾讯云官方SDK很快集成进来。但是在上测试环境部署时有了新的问题&#xff0c;通过Nginx代理后的环境无法访问到目标腾讯云接口&#xff0c;…...

C++之C++11引入enum class与传统enum关键字总结(二百五十一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…...

如何将word格式的文档转换成markdown格式的文档

如何将word格式的文档转换成markdown格式的文档 前言 A. 介绍Markdown和Word格式文档 什么是Markdown&#xff1f; Markdown是一种轻量级标记语言&#xff0c;旨在简化文本格式化和排版的过程。它以纯文本形式编写&#xff0c;通过使用简单的标记语法&#xff0c;使文档更具…...

论文省心了!盘点2026年全网爆红的的降AI率平台

轻松降低论文AI率在2026年已不再是天方夜谭。2026年降AI率平台横空出世&#xff0c;实测提速效果炸裂&#xff0c;覆盖AI痕迹消除、文本改写润色、降重优化、学术合规检测四大核心场景&#xff0c;高效搞定毕业论文难题。 一、全流程王者&#xff1a;一站式搞定论文全链路 这类…...

WAN2.2文生视频镜像快速部署:NVIDIA驱动适配+ComfyUI插件自动加载教程

WAN2.2文生视频镜像快速部署&#xff1a;NVIDIA驱动适配ComfyUI插件自动加载教程 1. 环境准备与快速部署 WAN2.2是一个强大的文生视频工具&#xff0c;结合了SDXL Prompt风格支持&#xff0c;能够根据中文提示词生成高质量视频内容。这个镜像已经预配置了所有必要的组件&…...

卡证检测矫正模型在嵌入式单片机上的应用探索

卡证检测矫正模型在嵌入式单片机上的应用探索 最近在做一个工业物联网的项目&#xff0c;需要给现场的设备加个证件核验功能。客户要求很简单&#xff1a;成本要低&#xff0c;部署要方便&#xff0c;最好能直接集成到现有的单片机系统里。一开始我们觉得这不可能——卡证检测…...

无需编程!cv_resnet18_ocr-detection WebUI界面操作详解

无需编程&#xff01;cv_resnet18_ocr-detection WebUI界面操作详解 1. 开篇&#xff1a;为什么选择这个OCR工具&#xff1f; 在日常工作和生活中&#xff0c;我们经常需要从图片中提取文字信息。传统OCR工具要么需要复杂的编程接口&#xff0c;要么功能单一难以满足需求。今…...

终极指南:Elasticsearch架构设计原理从倒排索引到分布式搜索的完整解析

终极指南&#xff1a;Elasticsearch架构设计原理从倒排索引到分布式搜索的完整解析 【免费下载链接】awesome-elasticsearch A curated list of the most important and useful resources about elasticsearch: articles, videos, blogs, tips and tricks, use cases. All abou…...

Keil uVision5与STC8H单片机开发实战:手把手教你搭建第一个项目

Keil uVision5与STC8H单片机开发实战&#xff1a;从零搭建完整项目框架 作为一名长期从事嵌入式开发的工程师&#xff0c;我深知初学者在迈出第一步时面临的困惑。本文将带你完整走一遍STC8H单片机在Keil uVision5环境下的项目搭建流程&#xff0c;不仅包含基础操作&#xff0c…...

Qwen-Image效果实测:对比传统模型,看看它的中文理解强在哪

Qwen-Image效果实测&#xff1a;对比传统模型&#xff0c;看看它的中文理解强在哪 你有没有试过用AI画图&#xff0c;结果被它“气”到哭笑不得&#xff1f;比如&#xff0c;你想画一个“穿着旗袍的女士在江南水乡的乌篷船上喝茶”&#xff0c;结果AI给你生成一个“穿着船在喝…...

AHT20温湿度传感器在STM32上的应用:从数据采集到OLED显示

AHT20温湿度传感器在STM32上的实战应用&#xff1a;从数据采集到OLED可视化 在物联网和智能硬件开发中&#xff0c;环境数据的实时监测与可视化是基础却关键的一环。AHT20作为新一代数字温湿度传感器&#xff0c;以其高精度、低功耗和I2C接口的便捷性&#xff0c;成为STM32开发…...

IDM激活的3种方案:兼容Win7-11的终极解决方案

IDM激活的3种方案&#xff1a;兼容Win7-11的终极解决方案 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script 问题引入&#xff1a;IDM试用期到期的烦恼 Internet D…...

ARM64虚拟化实战:从零搭建KVM环境并理解VHE特性

ARM64虚拟化实战&#xff1a;从零搭建KVM环境并深度解析VHE特性 开篇&#xff1a;为什么ARM64虚拟化值得关注&#xff1f; 在云计算和边缘计算迅猛发展的今天&#xff0c;ARM架构凭借其出色的能效比和可扩展性&#xff0c;正逐步蚕食传统x86服务器市场。根据最新行业报告&#…...