双向循环链表c语言,双向循环链表的实现与使用

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

首先是节点的创建:

创建的时候就要将数据填充到节点中,所以需要传入一个data参数,

还需设置两个节点的地址,一个是前节点,一个是后节点

也就是setPrev和setNext,之所以是Node*类型是因为

malloc这个函数返回的是它分配内存的地址

所以在节点创建时我们拿到的数据就是这个节点的地址数据,

地址数据当然应当用指针来保存

所以我们实际上对于每个节点的内容,以及节点与节点之间的操作都是通过指针实现的

那么我们怎么从createNode()这个函数中,获取到当前创建的新节点地址呢

有两种方案:

方案一:将节点地址作为返回值,但是有一个问题,我们要先分配一个内存,然后要往这个内存中填写数据,所以我们必然需要用到一个临时的指针变量currentNode记录这个节点的地址,然后在函数运行结束之前用return currentNode;但是这个变量是一个局部变量,其作用域很生命周期有限,并不能长久的保存malloc分配的地址数据。所以需要将createNode()这个函数声明为static,延长它的生命周期。

static Node* createNode(DataType data, Node *setPrev, Node *setNext)

{

Node *currentNode=(Node*)malloc(sizeof(Node));

currentNode->prev=setPrev;

currentNode->data=data;

currentNode->next=setNext;

return currentNode;

}

方案二:添加一个指针参数用来接收这个地址数据,

因为这个要接收的数据本身就是一个地址

所以用来接收这个数据的变量,类型必须是指针,

而这个变量又在createNode()函数外部,

要在函数中改变外部变量的内容,就要传入外部变量的地址,

所以这个接收参数currentNode实际上是一个指针的指针,

也就是我们所说的二级指针。

void createNode(DataType data, Node *setPrev, Node **currentNode, Node *setNext)

{

(*currentNode)=(Node*)malloc(sizeof(Node));

(*currentNode)->prev=setPrev;

(*currentNode)->data=data;

(*currentNode)->next=setNext;

}

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

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

相关文章

SDN精华问答 | 为什么会出现SDN?

SDN火热了好一阵子,无论运营商、政府企业、投资机构,一段时间,不知道SDN、不能甩几个SDN相关的名词术语,似乎都落后于时代了。今天,就来看看关于SDN的精华问答吧。1Q:SDN的本质属性? A&#xff…

一张图看懂2017双11中的网络产品和技术

摘要: 大家都知道,2017年双11又创造了新纪录,全天交易额1682亿,交易峰值32.5万笔/秒,支付峰值25.6W笔/秒,狂欢的背后是极其复杂庞大的技术系统,其中就有大量阿里云云计算相关的产品和技术&#…

开源Elasticsearch云托管服务,专享企业级服务

摘要: 日前,阿里云联合开源官方Elastic联合发布了Elasticsearch新产品。该产品基于开源Elasticsearch及商业版X-Pack插件的云托管服务,保证高性能、高可用,可弹性扩容,并提供企业级权限管控、安全监控告警等高级功能,适…

图书馆信息管理系统程序(c语言),C语言程序设计报告__图书馆信息管理系统.doc...

2014年课程设计成果报告项目: 程序设计C语言课程设计学号: 1304080049姓名:易凡班级:英才1301班专业:电气信息类设计日期:2014年3月至2014年5月指导教师: 刘立峻程序设计: 图书信息管…

Ivanti罗琦:IT服务管理中“拧紧螺丝”要有门道儿!

戳蓝字“CSDN云计算”关注我们哦!作者 | 刘晶晶Ivanti与科大讯飞的携手合作!初听这一消息,阿晶惊讶不已。毕竟科大讯飞擅长语音众所周知,Ivanti更专攻IT服务管理,看似“不相关”的两家企业,却有了某种隐含的…

CDN价格下调25% 阿里云再次冲击国内最低价

摘要: 在刚刚圆满落幕的云栖大会广东分会上,阿里云发布了很多重磅信息,其中不乏很多核心产品折扣幅度调整的信息。令人惊喜的是,阿里云CDN价格再次下调,降幅高达25%。降价完成后,带宽单价最低只需0.54元/Mb…

SpringBoot整合Spring Cloud Alibaba

spring-cloud官方中文文档https://www.springcloud.cc/spring-cloud-dalston.htmlspring-cloud官方文档https://cloud.spring.io/spring-cloud-static/Greenwich.SR1/single/spring-cloud.html#_quick_start_6Spring Cloud Alibaba官方文档https://github.com/alibaba/spring-c…

产品经理教你玩转阿里云负载均衡SLB系列(一):快速入门--什么是负载均衡

摘要: 负载均衡是一种技术,从字面意义上理解,就是让负载(变得)均衡,负载是什么呢?可以理解为工作量、工作强度。用日常生活中的例子来打比方,一群建筑工人,盖一幢楼房,有搬砖的&…

android touch事件坐标原点,Android onTouch事件与手势操作

触摸,手势操作已经很好的融入了我们的生活。那么Android开发中触摸事件要如何捕捉?如何处理?如何识别手势?事件的传递机制又是怎么样的?下面我们将通过一个小例子来进行这方面的学习。先看效果图如上图所示&#xff0c…

2019年技术盘点容器篇(二):听腾讯云讲讲踏入成熟期的容器技术 | 程序员硬核评测...

戳蓝字“CSDN云计算”关注我们哦!作者:刘晶晶据相关调研机构出具的报告数据显示,目前应用容器市场规模将从2016年的 7.62亿美元增长到2020年的27亿美元。显而易见,引入容器所展现的巨大灵活性有效推动了其采用速率,使企…

阿里云容器服务新增支持Kubernetes编排系统,性能重大提升

摘要: 作为容器编排系统的两大流派, Kubernetes和Swarm的重要性不言而喻。融合了两大高性能集成的阿里云容器服务,不仅可以降低50%的基础架构成本,提高交付速度将产品迭代加快13倍,还可以实现秒级的海量容器启动、秒级…

实战_01_Spring SpringMVC 整合Mybaits

文章目录一、技术选型1.1. maven坐标说明1.2. 环境准备二、工程所属关系2.1. 项目结构总览2.2. 工程所属关系总览三、创建聚合工程3.1. 聚合工程_ly-parent3.2. 聚合工程_ly-manager四、创建子项目4.1 创建子工程服务ly-common4.2 创建子工程服务ly-entity4.3 创建子工程服务ly…

android log.d 格式化,Android7.1 logd 日志记录缓冲区大小

一.先看上层1.1. 布局 KEYprivate static final String SELECT_LOGD_SIZE_KEY "select_logd_size";private static final String SELECT_LOGD_SIZE_PROPERTY "persist.logd.size";1.2. writeLogdSizeOption()updateLogpersistValues()private void writ…

Android热修复升级探索——代码修复冷启动方案

摘要: 前面一篇文档, 我们提到热部署修复方案有诸多特点(有关热部署修复方案实现, Android热修复升级探索——追寻极致的代码热替换)。其根本原理是基于native层方法的替换, 所以当类结构变化时&#xff0c…

maven 常用命令

编译打包跳过测试 mvn install -DskipTests或者 mvn clean install -Dmaven.test.skiptrueMaven出现.lastUpdated结尾的文件问题及解决 for /r %i in (*.lastUpdated) do del %i常用的镜像&#xff1a; 阿里云 <mirror><id>alimaven</id><name>aliy…

K8S精华问答 | 应用和运行时平台是怎样解耦的?

kubernetes&#xff0c;简称K8S&#xff0c;是用8代替8个字符“ubernete”而成的缩写。是一个开源的&#xff0c;用于管理云平台中多个主机上的容器化的应用&#xff0c;Kubernetes的目标是让部署容器化的应用简单并且高效&#xff08;powerful&#xff09;,Kubernetes提供了应…

android放在上个元素的左边代码,控件悬浮在某个控件之上 Android五大布局方式——相对布局(RelativeLayout)属性详解...

如图所示,想要实现搜索框在轮播图上面,不管滑动与否,这个组合控件都在上面1.就要用到RelativeLayout,相对于父元素定位,而且这个搜索框的组合控件必须要放在所有控件下面,在使用android:layout_alignParentTop"true"这个属性,贴紧父元素的上边缘.代码实现RelativeLay…

新功能:在负载均衡SLB控制台上查看DDoS安全防护阈值

摘要&#xff1a; 负载均衡作为业务系统的公网入口&#xff0c;承载海量访问请求的分发&#xff0c;常常也是DDoS攻击的对象&#xff0c;因此阿里云提供了免费的DDoS防护&#xff08;云盾&#xff09;&#xff0c;详情可以参考之前的博文《聊一聊负载均衡SLB的DDoS防护》。 由于…

实战_02_Spring SpringMVC 整合Mybaits

接上一篇&#xff1a;企业实战_01_Spring SpringMVC 整合Mybaits https://blog.csdn.net/weixin_40816738/article/details/101343414 文章目录一、数据库操作1.1. 创建数据库1.2. 表结构二、整合实战2.1. 整合思路2.1.1. Dao层2.1.2. service层2.1.3. Dao层表现层2.2. Dao整合…

自动化测试 之 “好用例、坏用例”

摘要&#xff1a; 自动化测试的重要性显而易见&#xff0c;但自动化测试又无法解决所有问题&#xff0c;所以说完全依赖自动化是不可能的&#xff0c;但完全没有自动化是万万不能。在软件开发项目中&#xff0c;重度依赖人力进行持续回归是一件非常枯燥的重复工作。企业需要花费…