C语言:链表

链表是一种常见的基础数据结构,它由一系列节点(Node)组成。每个节点包含两部分:数据域(存储数据)和指针域(存储下一个节点的地址)。链表的特点是元素在内存中不一定连续存储,而是通过指针连接起来。

以下是链表的一些基本特点:

  1. 动态性:链表的长度可以动态变化,不需要在创建时指定大小。
  2. 灵活性:链表可以方便地插入和删除元素,不需要像数组那样进行大量元素的移动。
  3. 多样性:链表有多种形式,如单向链表、双向链表、循环链表等。

以下是链表的主要类型:

  1. 单向链表:每个节点只有一个指针,指向下一个节点。
  2. 双向链表:每个节点有两个指针,一个指向前一个节点,另一个指向下一个节点。
  3. 循环链表:链表中最后一个节点的指针指向第一个节点,形成一个环。

1. 链表操作简介

在操作链表之前,要先来设计链表中每个结点的数据结构。我们设计一个学生的结构体变量,用来存放学生的学号和分数。

struct ST{int n;int score;struct ST *next;
};

在 C 语言中,指针必须指定它所指向的数据类型。由于 next 需要指向链表中的下一个 struct ST 类型的节点,因此它的类型必须是 struct ST *

另外,为了处理方便,通常都是在线性单向链表的第一个结点之前额外增加一个结点,称之为“头结点”。 

2. 空链表的建立

这里所说的空链表,是指只含有一个头结点的链表。

struct ST *createNullList()
{struct ST* head;head=(struct ST*)malloc(sizeof(struct ST));if(head!=NULL)head->next=NULL;elseprintf("Out of space!\n");return head;
}

动态内存分配有可能失败,因此需要检查head中 所存的值是否为NULL。若为NULL,表示空间分配失败,若不为NULL,则表示头结点已经成功分配。由于空链表没有实际结点,因此头结点的指针域应该存为NULL。 

3. 判断链表是否为空

int isNullList(struct ST* head)    //传进去头指针
{return head->next==Null;    //判断语句
}

4. 在链表最后添加一个结点

int append(struct ST* head, int n, int s)
{struct ST* p,*pnew;pnew = (struct ST*)malloc(sizeof(struct ST));if(pnew==NULL){printf("Out of space!");return 0;}else{pnew->n=n;pnew->sorce=s;p=head;                //p先指向头结点while(p->next!=NULL)   //若p所指不是链尾p=p->next;         //p后移一个结点p->next=pnew;          //链尾的next存储新结点指针pnew->next=NULL;       //使新结点成为链尾}return 1;
}

5. 求某结点的指针

例如,要查找链表中学号为n的结点的指针。

查找要从链表的第一个结点开始,依次将每个结点的学号与n比较,若找到该同学,返回其地址,若找不到,则返回NULL。

struct ST* locate(struct ST* head, int n)
{struct ST* p;p=head->next;            //将头结点的next域赋值给P,使指向第一个结点while(p!=NULL&&p->n!=n)  //如果p存的不是NULL(表示P指向一个实际存在的结点)p=p->next;return p;
}

6. 求p所指结点的前驱(前一个结点)

struct ST* locatePre(struct ST* head, struct ST* p)
{struct ST* ptemp;ptem=head;while(ptemp!=NULL&&ptemp->next!=p)ptemp=ptemp->next;return ptemp;
}

判断ptemp是不是等于NULL以及ptemp->next是不是等于p;

若两者都不是,则执行ptemp=ptemp->next,重复上一个步骤;

若ptemp等于NULL,表示已经找遍所有结点但没有找到p所指的结点,退出循环,返回NULL。若ptemp->next=p,则ptemp所指结点就是p所指结点的前驱,退出循环,返回ptemp。

7. 在某结点之后插入一个新结点

 

 

int insert(struct ST* head, struct ST* p, int n, float score)
{struct ST* pnew=(struct ST*)malloc(sizeof(struct ST));if(pnew==NULL){printf("Out of space!\n");return 0;}pnew->num=n;pnew->score=score;pnew->next=p->next;p->next=pnew;return 1;
}

8. 结点的删除

 

 

int delete(struct ST* head, int n)
{struct ST *p1,*p2;p1=head;//下面用循环来查找学号为n的结点的前驱while(p1->next!=NULL&&p1->next!=n)p1=p1->next;if(p1->next==NULL){printf("Not exist!\n");return 0;}p2=p1->next;p1->next=p2->next;free(p2);return 1;
}

 

 

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

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

相关文章

BUUCTF 之Basic 1(BUU LFI COURSE 1)

1、启动靶场,会生成一个URL地址,打开给的URL地址,会看到一个如下界面 可以看到是一个PHP文件,非常的简单,就几行代码,判断一下是否有一个GET的参数,并且是file名字,如果是并且加载&a…

GEE:连续变化检测与分类(Continuous Change Detection and Classification, CCDC)教程

连续变化检测与分类(Continuous Change Detection and Classification, CCDC)是一种土地变化监测算法,旨在对卫星数据的时间序列进行操作,特别是Landsat数据。CCDC包括两个部分,其一是变化检测算法(Change …

python小脚本,实时监测服务器是否宕机状态,并发送到指定群组

一,前言 众所周知,市面上监控软件很多,有Zabbix,Prometheus等,但对于相对简单的功能,需要第一时间发现问题,如服务器宕机,zabbix和Prometheus都需要等几分钟才会报警。 想到最原始…

故障排查:VMware虚拟机网络冲突,导致VPN网络无法正常访问

故障现象 某台windows10系统电脑,远程拨号SSL VPN后,无法正常公司内网。通过排查,发现重启开机,操作系统的默认路由多了一条公司内网的默认路由,但网关不正确。手动删除,重启系统又恢复原样。 排查过程 c…

adb的安装和使用 以及安装Frida 16.0.10+雷电模拟器

.NET兼职社区 .NET兼职社区 .NET兼职社区 1.下载adb Windows版本:https://dl.google.com/android/repository/platform-tools-latest-windows.zip 2.配置adb环境变量 按键windowsr打开运行,输入sysdm.cpl,回车。 高级》环境变量》系统变量》…

OpenCV结构分析与形状描述符(20)计算一个包围给定点集的最小外接圆函数minEnclosingCircle()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 找到一个包围二维点集的最小面积的圆。 该函数使用迭代算法来寻找一个二维点集的最小外接圆。这意味着函数将会通过反复逼近的过程来计算出能够…

多维时序 | Matlab基于BO-LSSVM贝叶斯优化最小二乘支持向量机数据多变量时间序列预测

多维时序 | Matlab基于BO-LSSVM贝叶斯优化最小二乘支持向量机数据多变量时间序列预测 目录 多维时序 | Matlab基于BO-LSSVM贝叶斯优化最小二乘支持向量机数据多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于BO-LSSVM贝叶斯优化最小二乘支…

莎朗斯通的比基尼视频曝光了她的日常锻炼!自爆曾在重症监护室呆了9天

如果您错过了,莎朗斯通 (Sharon Stone) 的华丽比基尼视频向您展示了她的日常锻炼! 9 月 12 日,斯通分享了一段她在泳池里锻炼的视频。她分享了这段视频,并配文:“我刚刚和教练 kristinemarie_18 完成了最后一次锻炼&a…

【Python刷题】Atcoder Beginner Contest 371

目录 A - Jiro题目描述算法思路代码实现 B - Taro题目描述算法思路代码实现 D - 1D Country题目描述算法思路代码实现 E - I Hate Sigma Problem题目描述算法思路代码实现 A - Jiro 题目描述 有三个人,知道他们之中每两个人的年龄关系,输出年龄第二大的…

Unity实现自己的协程系统

为什么自己实现一套协程系统 协程(Coroutine)是一个强大且灵活的工具,它可以帮助开发者处理异步任务,例如等待某些事件、处理逐帧更新等。在Unity中,协程通常通过IEnumerator来实现,这种机制允许代码在执行…

效率神器来了:AI工具手把手教你快速提升工作效能

随着科技的进步,AI工具已经成为提升工作效率的关键手段。本文将介绍一些实用的AI工具和方法,帮助你自动化繁琐的重复性任务、优化数据管理、促进团队协作与沟通,并提升决策质量。 背景:OOP AI-免费问答学习交流-GPT 自动化重复性任…

IP纯净度对跨境电商有哪些影响

在全球化贸易的浪潮中,跨境电商凭借其打破地理界限的能力,成为推动国际贸易的重要力量。然而,跨境电商的运营并非没有挑战,其中IP纯净度是影响其成功的关键因素之一。本文将探讨IP纯净度对跨境电商运营的多方面影响,并…

从单体到微服务:FastAPI ‘挂载’子应用程序的转变

在现代 Web 应用开发中,模块化架构是一种常见的设计模式,它有助于将大型应用程序分解为更小、更易于管理的部分。FastAPI,作为一个高性能的 Python Web 框架,提供了强大的支持来实现这种模块化设计。通过“挂载”子应用程序&#…

WebGL系列教程八(GLSL着色器基础语法)

目录 1 前言2 基本原则3 基本数据类型4 顶点着色器和片元着色器4.1 声明4.2 初始化项目4.3 赋值 5 结构体5.1 声明5.2 赋值 6 函数6.1 基本结构6.2 自定义函数6.3 常用内置函数 7 精度8 其他9 总结 1 前言 通过前七讲,我们已经见过了WebGL中的部分基础语法&#xff…

webpack5-手撸RemoveConsolePlugin插件

写在前面 其实呢,这个东西也就那样,主要是我们得清楚webpack构建过程中的生命周期钩子, 就拿这个插件来说,我们想要把输出的js文件里面的内容中的console语句去掉,那么我们就需要找到webpack处理完文件时的钩子&#…

海外VS国内:网安上市公司人均创收对比

二级市场分析章节中分析了中国网络网络安全上市公司人均创收63.2万、人均毛利37.6万,人均创利-1.6万。 有网友问了:海外网络安全公司的人均情况如何?那么让我们一起看看吧。 我们统计了在海外上市的28家主要网络安全公司的2023年的人均情况&…

2020ICPC上海 D - Walker M - Gitignore

D: 首先显然要二分,判断当前二分的mid时间下是否能满足走满0~n 枚举所有情况,这里按照左,右起点p1,p2分别讨论 p1向左 p2向左(以下向左和向右都代表向左或者向右到墙,而不代表初速度方向),只需要计算p1或者p2反弹之后还能走距离n就是合法 p1向左 p2向右&#xff…

PHP智慧家政同城服务家政系统小程序源码

智慧家政,同城服务新篇章 —— 探索家政系统的无限可能 开篇:走进智慧家政时代 在这个快节奏的生活中,每一分每一秒都显得尤为珍贵。当忙碌成为常态,如何让家成为真正的避风港?答案或许就藏在“智慧家政同城服务家政…

155K Star,Python 入门到进阶最佳学习资源

Hi,骚年,我是大 G,公众号「GitHub 指北」会推荐 GitHub 上有趣有用的项目,一分钟 get 一个优秀的开源项目,挖掘开源的价值,欢迎关注。 导语 如果你正在寻找一个全面、系统、深入的 Python 学习项目&#…

合资油车断崖式崩盘,买车的千万慎重了

文 | AUTO芯球 作者 | 雷慢 合资车,燃油车全体大逃亡的时候来了, 你敢信吗,8月份,国内新能源汽车零售渗透率达到54%, 我给大家讲个冷笑话, 几个月前还有车企老总说什么, “只要传统车企一发…