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

手撕数据结构—单链表

✅作者:简单^不简单
🔥系列专栏:C语言+数据结构
💖如果文章有错误,时刻欢迎大家的指正。当然觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝
💬格言:希望我们都能朝着光走‍‍‍🐱‍🏍

目录

相关知识点

        1.线性表

        2.顺序表

        3.链表

相关操作

1.定义数据结构

2.插入

2.1头插法

2.2尾插法

3.删除

完整代码


相关知识点

1.线性表

  • 定义:线性表 (linear list) 是 数据结构 的一种,一个线性表是n个具有相同特性的数据元素的有限序列。
  • 特点 

        1.有限的序列

        2.序列中的每一个元素都有唯一前驱和后继

2.顺序表

        分配一块连续的内存去存放这些元素,例如编程语言中的素组。

3.链表

        内存是不连续的,元素会各自被分配一块内存,内存和内存之间用指针进行相连。

 本文重点对单链表的相关操作进行讲解

相关操作

1.定义数据结构

typedef struct Node{int data;struct Node* next;
}Node;

2.插入

2.1头插法

                

        将头指针指向的节点赋值给新结点中next指向的节点,再将头结点的next从新指向node

//头插法
void headInsert(Node* list,int data){Node* node =(Node*)malloc(sizeof(Node));node->data = data;node->next = list->next;list->next = node;list->data++;
}

2.2尾插法

          

        创建一个新结点,将值传入其中,再将新结点的next—>NULL,最后通过遍历找到以前的尾元素,将尾元素的next指向该元素。

//尾插法
void tailInsert(Node* list,int data){Node* head = list;Node* node = (Node*)malloc(sizeof(Node));node->data = data;node->next = NULL;list = list->next;while(list->next){list = list->next;}list->next = node;head->data++;
}

3.删除

                 

        删除指定节点时,要注意指针指向的节点是否为空,之后便是进行扫描与交换数据域,再之后就是进行断开释放空间等操作

void delete(Node* list,int data){Node* pre = list;Node* current = list->next;while(current){if(current->data==data){pre->next = current->next;free(current);break;}pre = current;current = current->next;}list->data--;
}

完整代码

#include<stdio.h>
#include<stdlib.h>//开辟空间的头文件//定义数据结构
typedef struct Node{int data;struct Node* next;
}Node;//初始化头节点
Node* initList(){Node* list =(Node*)malloc(sizeof(Node));list->data = 0;list->next = NULL;return list;}//头插法
void headInsert(Node* list,int data){Node* node =(Node*)malloc(sizeof(Node));node->data = data;node->next = list->next;list->next = node;list->data++;
}//尾插法
void tailInsert(Node* list,int data){Node* head = list;Node* node = (Node*)malloc(sizeof(Node));node->data = data;node->next = NULL;list = list->next;while(list->next){list = list->next;}list->next = node;head->data++;
}//删除操作
void delete(Node* list,int data){Node* pre = list;Node* current = list->next;while(current){if(current->data==data){pre->next = current->next;free(current);break;}pre = current;current = current->next;}list->data--;
}//遍历操作
void printList(Node* list){list = list->next;while(list){printf("%d",list->data);list = list->next;}printf("\n");
}int main(){Node* list = initList();headInsert(list,1);headInsert(list,2);headInsert(list,3);headInsert(list,4);headInsert(list,5);tailInsert(list,6);tailInsert(list,7);tailInsert(list,8);tailInsert(list,9);tailInsert(list,10);delete(list,5);delete(list,10);delete(list,3);printList(list);return 0;}

相关文章:

手撕数据结构—单链表

✅作者&#xff1a;简单^不简单 &#x1f525;系列专栏&#xff1a;C语言数据结构 &#x1f496;如果文章有错误&#xff0c;时刻欢迎大家的指正。当然觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4ac;格言&#xff1a;希望我…...

Benewake(北醒) 快速实现 TF02-i-RS485 与电脑通信操作说明

目录 一、前言二、工具准备1. USB-RS485 转接器2. TF02-i-RS4853. 兆信直流电源4.连接线、绝缘胶带、螺丝刀5. PC&#xff1a;Windows 系统6. 串口助手软件 三、连接方式1. USB-RS485 转接板接口说明2. TF02-i-RS485 引脚定义3. 连接图 四、TF02-i-RS485 与电脑通信操作说明1. …...

【分享】科大讯飞星火认知大模型(初体验)

前言&#xff1a; 哈喽&#xff0c;大家好&#xff0c;我是木易巷~ 随着人工智能技术的迅猛发展&#xff0c;自然语言处理&#xff08;NLP&#xff09;成为了热门话题。在众多NLP模型中&#xff0c;科大讯飞星火认知大模型成为了一个备受瞩目的新秀&#xff0c;今天我们来了解…...

logstash 采集应用日志切割问题

1.logstash [oswatch@rce1 conf]$ cat test.conf input { file { path=>["/tmp/test/test.log*"] } } output { stdout { codec=>rubydebug{} } } 2.python脚本: [oswatch@rce1 conf]$ cat t1.py #!/usr/bin/python # -*- coding: UTF-…...

计算机网络实验:认识Packet Tracer软件

目录 前言实验目的实验内容及要求相关知识点实验指导实验过程总结 前言 计算机网络是当今信息技术的重要组成部分&#xff0c;它涉及到多种硬件和软件的协同工作&#xff0c;以实现数据的传输和交换。为了更好地理解和掌握计算机网络的基本原理和技术&#xff0c;我们需要进行…...

【MySQL新手到通关】第六章 时间日期函数

文章目录 1.获取日期时间函数1.1 获取当前日期时间1.2 获取当前日期1.3 获取当前时间 2.日期格式化★★★2.1 日期转指定格式字符串2.2 字符串转日期 3.日期间隔3.1 增加日期间隔 ★★★3.2 减去一个时间间隔★★★3.3 日期相差天数&#xff08;天&#xff09;3.4 相差时间&…...

深蓝学院C++基础笔记 第 1 章 C++初探

第 1 章 C初探 1&#xff0e;从Hello World 谈起 Hello World: #include <iostream> int mian() { std::cout << "Hello World!" << std::endl; }函数: 一段能被反复调用的代码&#xff0c;可以接收输入&#xff0c;进行处理并(或)产生输出-返回…...

【配电网重构】基于混合整数二阶锥配电网重构研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

Kubernetes mysql 实战以及外部存储处理 [一]

在 Kubernetes 中部署 MySQL 数据库需要考虑以下几个方面: 部署方式:可以选择使用 StatefulSet 或者 Deployment 进行部署,如果需要有状态的服务,使用 StatefulSet 更加合适。存储:MySQL 需要一个持久化存储来保存数据。可以使用 Kubernetes 提供的 PersistentVolumeClaim…...

使用【Python+Appium】实现自动化测试

一、环境准备 1.脚本语言&#xff1a;Python3.x IDE&#xff1a;安装Pycharm 2.安装Java JDK 、Android SDK 3.adb环境&#xff0c;path添加E:\Software\Android_SDK\platform-tools 4.安装Appium for windows&#xff0c;官网地址 Redirecting 点击下载按钮会到GitHub的…...

位图和布隆过滤器

位图和布隆过滤器 位图的概念位图的简单模拟实现位图set位图reset位图test 位图总的代码和实现位图的应用布隆过滤器布隆过滤器的简单实现相关操作讨论布隆过滤器的结构设计布隆过滤器插入布隆过滤器查找 布隆过滤器总代码 布隆过滤器优点和缺陷海量数据面试题哈希切割位图应用…...

Eclipse 教程Ⅳ

Eclipse 工作空间(Workspace) eclipse 工作空间包含以下资源&#xff1a; 项目文件文件夹 项目启动时一般可以设置工作空间&#xff0c;你可以将其设置为默认工作空间&#xff0c;下次启动后无需再配置&#xff1a; 工作空间(Workspace)有明显的层次结构。 项目在最顶级&…...

Webpack搭建本地服务器

1 开启本地服务器 2 HMR热模块替换 3 devServer配置 4 开发和生成环境 需要本地服务的目的就在每次我们保存项目源文件的时候都可以自动打包新的打包文件&#xff0c; 这里主要讲webpack-dev-server&#xff1a; 先安装&#xff1a; npm install webpack-dev-server -D 需要…...

基于Go开发PaaS平台3

Go开发PaaS平台核心功能 代码仓库地址GitHub - yunixiangfeng/gopaas 10-18 中间件前端页面以及核心API开发&#xff08;中&#xff09; C:\Users\Administrator\Desktop\gopaas\middlewareapi\handler\middlewareApiHandler.go package handlerimport ("context"…...

虎牙直播在微服务改造的实践总结

博主介绍&#xff1a;✌全网粉丝4W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战、定制、远程&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面…...

设置线程池的大小

线程池的理想大小取决于被提交任务的类型以及所部署系统的特性。在代码中通常不会固定线程池的大小,而应该通过某种配置机制来提供,或者根据Runtime. availableProcessors来动态计算。 幸运的是&#xff0c;要设置线程池的大小也并不困难&#xff0c;只需要避免“过大”和“过…...

Vue3 除了 keep-alive,还有哪些实现页面缓存的方法

有这么一个需求&#xff1a;列表页进入详情页后&#xff0c;切换回列表页&#xff0c;需要对列表页进行缓存&#xff0c;如果从首页进入列表页&#xff0c;就要重新加载列表页。 对于这个需求&#xff0c;我的第一个想法就是使用keep-alive来缓存列表页&#xff0c;列表和详情…...

JavaScript闭包

定义 定义&#xff1a;在计算机科学中&#xff0c;闭包&#xff08;Closure&#xff09;是一个函数及其相关引用环境组合而成的实体。简单来说&#xff0c;闭包是指一个函数以及该函数访问的外部变量的集合。在一些编程语言中&#xff0c;函数可以访问在其定义时所处的上下文中…...

华为OD机试之不含101的整数(Java源码)

不含101的数 题目描述 小明在学习二进制时&#xff0c;发现了一类不含 101的数&#xff0c;也就是&#xff1a; 将数字用二进制表示&#xff0c;不能出现 101 。 现在给定一个整数区间 [l,r] &#xff0c;请问这个区间包含了多少个二进制不含 101 的整数&#xff1f; 输入描述…...

SpringCloud Ribbon 学习

SpringCloud Ribbon 学习 文章目录 SpringCloud Ribbon 学习1. Ribbon 是什么&#xff1f;2. LB(Load Balance)3 Ribbon 架构图&机制4 Ribbon 常见负载均衡算法5 测试 1. Ribbon 是什么&#xff1f; Spring Cloud Ribbon 是基于 Netflix Ribbon 实现的一套客户端 负载均衡…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

ip子接口配置及删除

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

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...