拿捏单链表

目录

引言

一:链表的定义

二:单链表的定义 

三:单链表的增删查改 

1.单链表增删查改及遍历的声明

注:在测试中创建指向头结点的指针plist 

2.二级指针应用的说明 

 3.单链表的遍历

4.创建节点 

5.单链表的插入 

(1)头插

(2) 尾插

 (3)任意位置之前插入

(4)任意位置之后插入

6.单链表的删除 

(1)头删

(2) 尾删

(3) 任意位置删除

7.单链表的查找 

8.单链表的修改 

四:关于单链表的介绍就到此为止了,青山不改,绿水长流,后会有期。 


接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧 

引言

   链表是一种常见的数据结构,它可以用来存储数据,并可以快速的进行增删查改的目的。相对于数组来说链表更加灵活和高效,数组的优势在于数组下标的随机访问,链表则可以更好的解决数组容量的大小,频繁扩容等一系列问题。

   接下来本文将介绍关于链表的定义以及单链表的增删查改,知识云游号即将发车

   辞忧提醒你请系好安全带,准备发车

一:链表的定义

1.链表是由一系列的节点构成,每个节点包含一个数据内容的数据域和一个指向下一个节点的指针的指针域。

2.每个节点是由malloc申请来的,所以每个节点是在内存空间中的堆区中,并且是在堆中随即申请的,所以各结点的地址是不连续的,是随机的。并且与在栈中申请的局部变量不同,局部变量出作用域销毁,而节点是在堆中,不销毁。

3.每个链表都包含一个头节点和一个指向头结点的指针变量,用来对链表进行各种操作。每个链表的尾节点中指针域为NULL。

二:单链表的定义 

三:单链表的增删查改 

1.单链表增删查改及遍历的声明


#include <stdio.h>
#include <stdlib.h>
#include <assert.h>typedef int SListDatatype;typedef struct SListNode
{SListDatatype data;struct SListNode* next;
}SLTNode;//打印单链表数据
void SLTPrint(SLTNode*phead);//单链表之创建节点
SLTNode* CreatNode(SListDatatype x);//单链表之头插
void SLTPushFront(SLTNode** pphead,SListDatatype x);//单链表之尾插
void SLTPushBack(SLTNode** pphead, SListDatatype x);//单链表之头删
void SLTPopFront(SLTNode**pphead);//单链表之尾删
void SLTPopBack(SLTNode **pphead);//单链表之查找
SLTNode* SLTFindData(SLTNode** pphead, SListDatatype data);//单链表之修改
void SLTModifyData(SLTNode** pphead, SListDatatype place,SListDatatype data);//单链表之任意位置之前插入
void SLTPushArbit(SLTNode**pphead,SListDatatype place,SListDatatype data);//单链表之任意位置删除
void SLTPopArbit(SLTNode** pphead, SListDatatype place);//单链表之任意位置之后插入
void SLTPushBackArbit(SLTNode** pphead, SListDatatype place, SListDatatype data);
注:在测试中创建指向头结点的指针plist 

2.二级指针应用的说明 

二级指针顾名思义就是指向指针的指针,在最早接触指针的时候,有一个最简单的例子,就是用函数来实现两数交换,这个问题最初我们写的代码就如下

发现根本没有解决问题,主要原因是改变形参不改变实参,因此便想到运用指针的方法:

这次发现 便可以,因此要改变int类型的值必须传int*,改变int*的值必须传int**,对于单链表中的结构体也一样,改变头节点的指针,就得使用头节点指针的指针。

 3.单链表的遍历

void SLTPrint(SLTNode* phead)
{SLTNode* cur = phead;while (cur != NULL){printf("%d->",cur->data);cur = cur->next;}printf("NULL\n");
}

4.创建节点 

SLTNode* CreatNode(SListDatatype x)
{SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));if (newnode == NULL){perror("malloc newnode");return ;}newnode->data = x;newnode->next = NULL;return newnode;
}

注:x为数据域的内容

5.单链表的插入 

(1)头插
void SLTPushFront(SLTNode** pphead,SListDatatype x)
{assert(pphead);SLTNode* newnode = CreatNode(x);newnode->next = *pphead;*pphead = newnode;
}

 

(2) 尾插
void SLTPushBack(SLTNode** pphead, SListDatatype x)
{assert(pphead);SLTNode* newnode = CreatNode(x);//1.空链表if (*pphead == NULL){*pphead = newnode;}else   //2.不是空链表{//找尾SLTNode* cur = *pphead;while (cur->next != NULL){cur = cur->next;}cur->next = newnode;}
}

 

 (3)任意位置之前插入
//查找代码
SLTNode* SLTFindData(SLTNode** pphead, SListDatatype x)
{assert(pphead);assert(*pphead);//空链表不需查找SLTNode* cur = *pphead;while (cur){if (cur->data == x){return cur;}cur = cur->next;}return NULL;
}
void SLTPushFrontArbit(SLTNode** pphead, SListDatatype place,SListDatatype data)
{assert(pphead);assert(*pphead);//空链表不能任意位置插入SLTNode* PushPlace = SLTFindData(pphead, place);if (PushPlace != NULL){if (PushPlace == *pphead)//1.只有一个节点{SLTPushFront(pphead, data);}else//2.一个以上节点{SLTNode* newnode = CreatNode(data);SLTNode* cur = *pphead;while (cur->next != PushPlace){cur = cur->next;}cur->next = newnode;newnode->next = PushPlace;}}else{printf("无此位置");return;}
}

 

(4)任意位置之后插入
SLTNode* SLTFindData(SLTNode** pphead, SListDatatype x)
{assert(pphead);assert(*pphead);//空链表不需查找SLTNode* cur = *pphead;while (cur){if (cur->data == x){return cur;}cur = cur->next;}return NULL;
}
void SLTPushBackArbit(SLTNode** pphead, SListDatatype place, SListDatatype data)
{assert(pphead);assert(*pphead);//空链表不需查找插入SLTNode* PushPlace = SLTFindData(pphead, place);if (PushPlace){SLTNode* newnode = CreatNode(data);if (*pphead == PushPlace)//头节点之后插入{(*pphead)->next = newnode;}else if(PushPlace->next==NULL)//尾节点之后插入{SLTNode* cur = *pphead;while (cur != PushPlace){cur = cur->next;}cur->next = newnode;}else{SLTNode* cur = *pphead;while (cur != PushPlace){cur = cur->next;}SLTNode* curr = cur->next;newnode->next = curr;cur->next = newnode;}}else{printf("找不到");return;}
}

 

6.单链表的删除 

(1)头删
void SLTPopFront(SLTNode** pphead)
{assert(pphead);assert(*pphead);//空链表不能删除//1.只有一个节点if ((*pphead)->next == NULL){*pphead = NULL;free(*pphead);}else  //2.一个以上节点{SLTNode* del = *pphead;*pphead = del->next;del->next = NULL;free(del);}
}

 

(2) 尾删
void SLTPopBack(SLTNode** pphead)
{assert(pphead);assert(*pphead);//空链表不能删除//1.只有一个节点if ((*pphead)->next == NULL){*pphead = NULL;free(*pphead);}else{SLTNode* cur = *pphead;while (cur->next->next != NULL){cur = cur->next;}cur->next = NULL;free(cur->next);}
}

 

 

(3) 任意位置删除
//查找
SLTNode* SLTFindData(SLTNode** pphead, SListDatatype x)
{assert(pphead);assert(*pphead);SLTNode* cur = *pphead;while (cur){if (cur->data == x){return cur;}cur = cur->next;}return NULL;
}
void SLTPopArbit(SLTNode** pphead, SListDatatype place)
{assert(pphead);assert(*pphead);//空链表不能查找删除SLTNode* PopPlace = SLTFindData(pphead, place);if (PopPlace != NULL){if (*pphead == PopPlace)//只有一个节点{SLTPopFront(pphead);}else{SLTNode* cur = *pphead;while (cur->next != PopPlace){cur = cur->next;}SLTNode* del = PopPlace;cur->next = del->next;free(del);}}else{printf("无此位置");return;}
}

 

7.单链表的查找 

 

SLTNode* SLTFindData(SLTNode** pphead, SListDatatype x)
{assert(pphead);assert(*pphead);SLTNode* cur = *pphead;while (cur){if (cur->data == x){return cur;}cur = cur->next;}return NULL;
}

8.单链表的修改 

//指定位置修改
void SLTModifyData(SLTNode** pphead, SListDatatype place,SListDatatype data)
{assert(pphead);assert(*pphead);//空链表不能修改SLTNode* ret = SLTFindData(pphead, place);ret->data = data;
}

四:关于单链表的介绍就到此为止了,青山不改,绿水长流,后会有期。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/684437.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

防御保护--内容安全过滤

目录 文件过滤 内容过滤技术 邮件过滤技术 应用行为控制技术 DNS过滤 URL过滤 防火墙 ---- 四层会话追踪技术 入侵防御 ---- 应用层深度检测技术 深度包检测深度流检测 随着以上俩种的成熟与完善&#xff0c;提出了所谓的内容安全过滤 当然上网行为确实需要治理&…

相机图像质量研究(16)常见问题总结:光学结构对成像的影响--IRCUT

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

BDD - Python Behave 用户自定义配置文件

BDD - Python Behave 用户自定义配置文件 引言默认 behave.ini 配置文件自定义配置文件json 格式的配置文件ini 格式的配置文件 实例应用项目结构代码BDD/Features/user_data.feature 文件BDD/steps/user_data_steps.py 文件BDD/environment.py 文件默认配置文件 behave.ini自定…

精炼爆炸性新闻!OpenAI发布革命性AI视频生成模型Sora:实现长达60秒的高清视频创作「附AIGC行业系统搭建」

在人工智能领域&#xff0c;每一次技术革新都引领着未来的发展方向。OpenAI&#xff0c;作为全球领先的人工智能研究机构&#xff0c;再次证明了其在推动AI技术革新方面的领导地位。近日&#xff0c;OpenAI宣布推出了一款革命性的AI视频生成模型——Sora&#xff0c;这一大胆的…

linux 08 文件查找

02. 第一. alias&#xff1a;起别名(可以输入别名就可以执行对应的命令)&#xff0c;语法&#xff1a;alias 别名‘ls -l’ 第二. locate&#xff1a; locate 找不到最近的文件 更新locate 后 find命令&#xff1a; find&#xff1a; find 路径 选项 文件名&#x…

day42 一个极简动画效果(复习相关属性)

<!DOCTYPE html> <html><head><title>动画页面</title><style>body {font-family: Arial, sans-serif;background-color: #f2f2f2;margin: 0;padding: 0;}.container {max-width: 800px;margin: 0 auto;margin-top: 100px;padding: 20px;b…

Windows系统VMware创建多个CentOS7虚拟机 NAT网络配置 ssh连接

主要目标: 1.创建3个虚拟机, centos7系统 2.虚拟机之间互相访问 3.物理机访问各虚拟机, 通过xshell建立ssh连接 4.物理机网络变化时,仍能访问 用途: NoSQL课程使用, 课前环境搭建,个人备忘 基本信息&#xff1a; 物理机&#xff1a; windows 11 操作系统 虚拟机软件&#xff…

数据发送程序

#include<reg51.h> //包含单片机寄存器的头文件 unsigned char code Tab[ ]{0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; //流水灯控制码&#xff0c;该数组被定义为全局变量 /***************************************************** 函数功能&#xff1a;向PC发…

SPI控制8_8点阵屏

协议与硬件概述 SPI SPI是串行外设接口&#xff08;Serial Peripheral Interface&#xff09;的缩写。是一种高速的&#xff08;10Mbps&#xff09;的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且在芯片的管脚上只占用四根线。 引脚介绍 SCLK&#xff1a;…

备战蓝桥杯---图论之最短路Bellman-Ford算法及优化

目录 上次我们讲到复杂度为&#xff08;nm)logm(m为边&#xff0c;n为点&#xff09;的迪杰斯特拉算法&#xff0c;其中有一个明显的不足就是它无法解决包含负权边的图。 于是我们引进Bellman-Ford算法。 核心&#xff1a;枚举所有的点&#xff0c;能松弛就松弛&#xff0c;直…

利用修改邻接变量

资源下载 【免费】突破密码认证程序&#xff08;修改邻接变量&#xff09;资源-CSDN文库 资源内容 源码 /*****************************************************************************To be the apostrophe which changed "Impossible" into "Im possib…

【AI绘画】硬核解读Stable Diffusion(完整版) 小白必收藏!!!

手把手教你入门绘图超强的AI绘画&#xff0c;用户只需要输入一段图片的文字描述&#xff0c;即可生成精美的绘画。给大家带来了全新保姆级教程资料包 &#xff08;文末可获取&#xff09; 2022年可谓是AIGC&#xff08;AI Generated Content&#xff09;元年&#xff0c;上半年…

爱上JVM——常见问题:JVM组成(一)

1 JVM组成 1.1 JVM由那些部分组成&#xff0c;运行流程是什么&#xff1f; 难易程度&#xff1a;☆☆☆ 出现频率&#xff1a;☆☆☆☆ JVM是什么 Java Virtual Machine Java程序的运行环境&#xff08;java二进制字节码的运行环境&#xff09; 好处&#xff1a; 一次编写&…

Spring AOP的实现方式

AOP基本概念 Spring框架的两大核心&#xff1a;IoC和AOP AOP&#xff1a;Aspect Oriented Programming&#xff08;面向切面编程&#xff09; AOP是一种思想&#xff0c;是对某一类事情的集中处理 面向切面编程&#xff1a;切面就是指某一类特定的问题&#xff0c;所以AOP可…

ChatGPT高效提问—prompt实践(白领助手)

ChatGPT高效提问—prompt实践&#xff08;白领助手&#xff09; ​ 随着社会的不断发展&#xff0c;白领的比例越来越高。白领的工作通常较为繁忙&#xff0c;需要管理复杂的项目。工作量大、要求高、任务紧急&#xff0c;时间分配不当部分可能导致工作效率低下&#xff0c;任…

问题:人的安全知识和技能是天生的。() #媒体#知识分享#学习方法

问题&#xff1a;人的安全知识和技能是天生的。&#xff08;) 人的安全知识和技能是天生的。() 参考答案如图所示 问题&#xff1a;&#xff08;&#xff09;是党和国家的根本所在、命脉所在&#xff0c;是全国各族人民的利益所在、幸福所在。 A.人民当家作主 B.坚持和完善…

OpenAI突然发布首款文生视频模型——Sora;谷歌发布Gemini 1.5,迈向多模态大模型新时代

&#x1f989; AI新闻 &#x1f680; OpenAI突然发布首款文生视频模型——Sora 摘要&#xff1a;OpenAI发布了首个AI视频模型Sora&#xff0c;可以根据文字指令生成神级效果的长视频&#xff0c;引发了广泛关注和震惊。 Sora模型通过深入理解语言和图像&#xff0c;能够创造出…

代码随想录算法训练营第二十七天|贪心算法理论基础,455.分发饼干,376. 摆动序列,53. 最大子序和

系列文章目录 代码随想录算法训练营第一天|数组理论基础&#xff0c;704. 二分查找&#xff0c;27. 移除元素 代码随想录算法训练营第二天|977.有序数组的平方 &#xff0c;209.长度最小的子数组 &#xff0c;59.螺旋矩阵II 代码随想录算法训练营第三天|链表理论基础&#xff…

中国电子学会2023年12月份青少年软件编程Scratch图形化等级考试试卷三级真题(含答案)

2023-12 Scratch三级真题 分数&#xff1a;100 题数&#xff1a;31 测试时长&#xff1a;60min 一、单选题(共18题&#xff0c;共50分) 1.运行左图程序&#xff0c;想得到右图中的效果&#xff0c;红色框应填写的数值是&#xff1f;&#xff08;D&#xff09;(3分) A.12 …

《合成孔径雷达成像算法与实现》Figure6.18

% rho_r c/(2*Fr)而不是rho_r c/(2*Bw) % Hsrcf exp函数里忘记乘pi了 clc clear close all参数设置 距离向参数设置 R_eta_c 20e3; % 景中心斜距 Tr 2.5e-6; % 发射脉冲时宽 Kr 20e12; % 距离向调频率 alpha_os_r 1.2; …