链表之双向链表

又是敲代码学习的一天,虽然学的很痛苦,但是看到自己学完后有成果出来还是 很高兴的。
接下来废话不多说直接上代码,代码里有各个函数的解释说明,贯穿着我对这个双向链表的理解

//感觉这个双向链表,就是在单向链表中稍微多加了一个数据域--前指针,
//其他的话也没什么太大的区别,其次在进行数据交换时要注意两个数据之间指针的断连
//是先断还是先连,这个要考虑清楚,不然写代码的时候会感到很困惑
//首先定义一下结构体
typedef struct Node
{int data;		//数据域Node * left;	//这是指向左边节点的指针域Node* right;	//这是指向右边节点的指针域
}Node;
//创建头节点,作为链表的头
Node * createHeadNode()
{Node * headNode = (Node*)malloc(sizeof(Node));headNode->left = headNode->right = NULL;return headNode;
}
//创建节点,使后面的申请节点操作更为方便,有要创建节点直接调用该函数即可
Node * createNode(int data)
{Node * newNode = (Node*)malloc(sizeof(Node));newNode->data = data;newNode->left = newNode->right = NULL;return newNode;
}
/*在链表头部插入数据,这个时候要考虑表头后面是否有数据,
没有数据操作就很方便,直接将两个节点连接就行。但是头节点后头有数据操作就会麻烦一些,
要考虑到节点之间连接的先后顺序,顺序没想清楚的话就很容易出问题
连接方法是这样的:1. 先让头节点后头的那个节点和新生成的节点先相互连上即:headNode->right->left = newNode;newNode->right = headNode->right;2. 然后让头节点和新节点连上newNode->left = headNode;headNode->right = newNode;如果还是不是很理解的话可以自己画个图看看,多看一阵子就想出来,时间关系我就不多讲了
*/
//链表头部插入数据
void headAddNode(Node * headNode,int data)
{Node * newNode = createNode(data);if (headNode->right == NULL){headNode->right = newNode;newNode->left = headNode;}else{headNode->right->left = newNode;newNode->right = headNode->right;newNode->left = headNode;headNode->right = newNode;}
}
/*这个操作就有点麻烦了,要三个指针了,一个记录当前位置,一个记录下一个节点的地址,还要有一个新节点,这里主要是要找的尾节点,用循环结构就行,找到之后就很方便了,代码在下面自己体会吧,不是很难,这个只要想清楚你要干什么,然后就是你完成这件事的一些条件,把这些条件满足就行,事情不就完成了
*/
//尾部插入数据
void tailNodeData(Node * headNode,int data)
{Node * newNode = createNode(data);Node* proPMove = headNode;Node * pMove = headNode;while (pMove){proPMove = pMove;pMove = pMove->right;}proPMove->right = newNode;newNode->left = proPMove;
}
//将链表的数据输出
void printNodeData(Node * headNode)
{Node* pMove = headNode->right;while (pMove){printf("%d-->", pMove->data);pMove = pMove->right;}printf("\n");}int main()
{Node * List = createHeadNode();//创建双向链表的头,不存放数据for (int i = 0; i < 10; i++){headAddNode(List, i);}printNodeData(List);//打印链表里的数据tailNodeData(List, 11);printNodeData(List);return 0;
}

看了这么多了,是不是很累了,再坚持一下,或者休息一下再来看
其实这个双向链表还有别的实现方式–借助第二个结构体

typedef struct List
{int size ;			//用于统计几点的数目List * head;		//用于指向链表的头部List * tail;		//用于指向链表的尾部
}List/*然后很简单了,这个就交给文章前的你来完成了
*/

此时的你经过上面的双向链表的学习,有没有一点想法。有没有想实现双向循环链表。
这时你会有灵感吗?
如果没有的话,那我来提醒一下你。其实这时候你只要将这个双向链表的left的NULL赋为最后一个节点的地址,最后一个节点的right赋为头节点的地址。这样不就头尾连接起来了。是不是很神奇。
那这样有思路了,剩下的就交给你来实现了。代码我就不写了,如果有遇到什么问题可以私信我哦,有空看到了会回复的。
好了,今天就先写到这里了,好困太晚了,先睡了。。

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

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

相关文章

react手机机端css_react工程搭建系列之---移动端适配与antd-mobile高清适配方案

一、逻辑像素(css像素)与物理像素(设备像素)机型逻辑像素物理像素Scale Factoriphone 3GS320 x 480320 x 4801xiphone 4320 x 480640 x 9602xiphone 4S320 x 480640 x 9602xiphone 5320 x 568640 x 11362xiphone 5C320 x 568640 x 11362xiphone 5S320 x 568640 x 11362xiphone …

升级bios_华硕400系主板升级BIOS:静待11代酷睿CPU

1月份对PC玩家来说还有很多惊喜&#xff0c;AMD、NVIDIA、Intel都会在CES上推出新一代产品&#xff0c;其中Intel针对桌面端的产品是11代酷睿&#xff0c;代号Rocket Lake-S。Rocket Lake仍将采用14nm制造工艺&#xff0c;基本确定也将是Intel最后一代14nm处理器。CPU架构方面&…

win10共享打印错误0x0000006_Win10连接共享打印机提示0x80070035错误的解决办法

关于Win10连接共享打印机提示0x80070035错误&#xff0c;概括起来主要有以下几个方面。下面直接上解决方法&#xff0c;请碰到这个错误的朋友自己按照下面的方法一一排查。因为主要就是每个人安装的系统不一样&#xff0c;现在系统封装工具太多了&#xff0c;流程也傻瓜化了&am…

用vscode编写静态页面_开发中实用的VSCode插件推荐

本篇文章给大家介绍一下开发中实用的VSCode插件推荐。有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对大家有所帮助。工欲善其事必先利其器&#xff0c;以下是本人为前端开发收集的vscode插件&#xff0c;有需要的话赶紧mark起来吧~一、代码片段类插件…

取得数组下标_《零基础C++入门教程》——(8)搞定二维数组与循环嵌套

一、学习目标了解二维数组的使用方法了解循环嵌套的使用方法目录预备第一篇&#xff0c;使用软件介绍在这一篇&#xff0c;C与C使用的软件是一样的&#xff0c;查看这篇即可&#xff1a;《零基础看得懂的C语言入门教程》——(二)简单带你了解流程 想了解编译原理和学习方法点这…

缺陷调研报告_工厂的缺陷的分析报告及产生原因

精彩文档锻造成形过程中的缺陷及其防止方法一、钢锭的缺陷钢锭有下列主要的缺陷&#xff1a;(1)缩孔和疏松钢锭中缩孔和疏松是不可避免的缺陷&#xff0c;但它们出现的部位可以控制。钢锭中顶端的保温冒口&#xff0c;造成钢液缓慢冷却和最后凝固的条件&#xff0c;一方面使锭身…

linux 的swap具体分析_Linux SWAP 深度解读

概述本文讨论的 swap基于Linux4.4内核代码 。Linux内存管理是一套非常复杂的系统&#xff0c;而swap只是其中一个很小的处理逻辑。希望本文能让读者了解Linux对swap的使用大概是什么样子。阅读完本文&#xff0c;应该可以帮你解决以下问题&#xff1a;1、 swap到底是干嘛的&…

物联卡的使用_物联卡在手机上使用有什么影响?网友:寿命分别是3个月,16天,9天...

个人使用物联卡是否合法&#xff1f;当然&#xff0c;个人是可以使用的&#xff0c;只不过是使用在除手机、平板以外的智能设备上。重点提醒&#xff1a;手机和平板除外。物联卡&#xff0c;是运营商为物流网服务企业提供的用于智能终端设备联网的&#xff0c;仅面对企业用户进…

多行文字cad提取数据_利用CAD自带的数据提取功能手动提取假表格至Excel

“吾生也有涯&#xff0c;而知也无涯&#xff0c;以有涯随无涯&#xff0c;殆已&#xff01;”&#xff0c;在已经有了免费的“源泉设计”插件可以自动提取假表格至Excel之后&#xff0c;笔者为什么还要讲解手动提取的方法&#xff1f;无他&#xff0c;生命在于折(zhuang)腾(bi…

gridview标题居中显示_Pr:制作片尾滚动字幕(旧版标题法)

本文介绍使用 Pr 的旧版标题设计器来制作传统片尾滚动字幕的方法。效果视频◆ ◆ ◆一般方法与步骤1、首先&#xff0c;将文字内容输入到一个文本文件中。按 Ctrl/Cmd A 全选&#xff0c;按 Ctrl/Cmd C 复制以备用。2、Pr菜单&#xff1a;文件/新建/旧版标题。3、点击“滚动…

mysql临时表空间_MySQL 5.7 深度解析: 临时表空间

先来说说临时表的概念。 临时表顾名思义&#xff0c;就是临时的&#xff0c;用完销毁掉的表。 数据既可以保存在临时的文件系统上&#xff0c;也可以保存在固定的磁盘文件系统上。 临时表有下面几种&#xff1a;全局临时表这种临时表从数据库实例启动后开始生效&#xff0c;在数…

mysql 从库状态_大神教你自动发现监控mysql从库状态

导读zabbix从库如果复制有问题&#xff0c;在主库机器有问题的时候&#xff0c;切为主就会导致数据的丢失。或者主从分离的时候&#xff0c;如果从库出现延时状态的话&#xff0c;会导致前端页面展示的数据不是为最新的数据。因此&#xff0c;监控mysql从库的状态是必要的。mys…

mysql查看session对应的ip_Mysql 查看session连接数,状态 | 学步园

命令&#xff1a; showprocesslist; 如果是root帐号&#xff0c;你能看到所有用户的当前连接。如果是其它普通帐号&#xff0c;只能看到自己占用的连接。 showprocesslist;只列出前100条&#xff0c;如果想全列出请使用showfull processlist; mysql> show processlist;命令&…

mysql集群fuzhi_MySQL集群 和MySQL主从复制的不同

主从复制理论上支持无穷大的从库个数&#xff0c;实际情况下&#xff0c;受服务器带宽和读写能力的影响请参考mysql官方手册的建议&#xff1a;理论上&#xff0c;通过使用单个主服务器/多从服务器设置&#xff0c;可以通过添加更多的从服务器来扩充系统&#xff0c;直到用完网…

mysql 查询一个字段快还是一条记录快_mysql (优化)查询一条再筛选某个字段和直接查询该条的某个字段的效率比较...

查询所有&#xff0c;10000次&#xff0c;$sql "select * from mh_user where (username‘333‘) and (password‘xxx‘)";总共耗时1.1420359611511查询username字段&#xff0c;10000次。$sql "select username from mh_user where (username‘333‘) and (p…

winform mysql 工具类_C#工具类MySqlHelper,基于MySql.Data.MySqlClient封装

1 usingSystem;2 usingSystem.Collections.Generic;3 usingSystem.Linq;4 usingSystem.Text;5 usingSystem.Threading.Tasks;6 usingSystem.Data;7 usingMySql.Data.MySqlClient;8910 namespaceFly.Util.DataBase11 {12 /// 13 ///MySql数据库操作类14 /// 15 public static cl…

服务器搭建php mysql5_Windows下php5+apache+mysql5 手工搭建笔记

Windows下php5apachemysql5 手工搭建笔记更新时间&#xff1a;2011年02月15日 01:35:09 作者&#xff1a;php运行环境对于站长们或者初学者来说可以直接用一键包的方式或者直接从服务提供商处得到支持&#xff0c;不必自己手工按部就班的搭建&#xff0c;所以这篇文章是写给我…

java连接mysql封装代码_JDBC连接数据库方法的封装,以及查询数据方法的封装

(在上一篇文章中&#xff0c;我们详细的介绍了连接数据库的方法&#xff0c;以及eclipse操作数据库信息的相关方法&#xff0c;在这里我们将主要讲封装。)主要内容&#xff1a;一般的连接数据库测试把连接数据库的方法封装成一个类和测试一个简单的插入表实例查询数据实例封装查…

mysql连接字符串加密配置文件_Asp.net2.0如何加密Web.config配置文件数据库连接字符串...

在asp.net2.0中,发布网站时,加密web.config,这样可以有效保证数据库用户和密码安全,其步骤如下:①添加密钥执行:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pc "hnlaw" -exp其中"hnlaw"为密钥名称②添加web.config节点在web.config的之…

Java编程和C语言哪个更好?

学编程用哪一个编程语言好?很多人刚开始接触编程的时候都不知道自己该学哪个好&#xff0c;软件开发编程语言多达600余种&#xff0c;每种都有各自的特点和应用领域。目前&#xff0c;热门编程语言无外乎Java、C、C了&#xff0c;实际上&#xff0c;Java确实是从C语言和C语言继…