数据结构学习系列之双向链表的两种创建方式

  • 方法1:
  • 通过返回值返回所申请的头结点所在的内存空间首地址,即创建双向链表的头结点,代码如下:
  • 示例代码:
c 复制代码
	node_t *create_dplink_node_1(){
	
	    node_t *phead = (node_t *)malloc(sizeof(node_t));
	    
	    if(NULL == phead){
	
	        printf("内存分配失败\n");
	
	        exit(-1);
	
	    }
	
	    phead->data = -1;
	    phead->front = NULL;
	    phead->next = NULL;
	
	    return phead;
	
	}
  • 注意事项:
  • 1.分配完头结点的内存地址空间后,一定要检查内存分配是否成功
  • 2.若头结点的内存分配失败,需要使用shell命令exit(-1)退出
  • 3.双向链表的每个结点都有三个部分,即前驱、元素、后继front、data、next),而头结点的数据域可以不储存任何数据,头结点的数据域在此处,我将其被赋值 -1
  • 4.头结点的指针域(含前驱、后继)被赋值 NULL,表示此时的双向链表只有一个头结点
  • 方法2:
  • 使用地址传参的方法创建双向链表的头结点,代码如下:
  • 示例代码:
c 复制代码
	int create_dplink_node_2(node_t **phead,int data){
	
	    if(NULL == phead){
	
	
	        printf("入参为NULL\n");
	
	        return -1;
	
	    }
	
	    *phead = (node_t *)malloc(sizeof(node_t));
	
	    if(NULL == *phead){
	
	
	        printf("内存分配失败\n");
	
	        return -1;
	
	    }
	
	    (*phead)->data = data;
	    (*phead)->front = NULL;
	    (*phead)->next = NULL;
	
	    return 0;
	
	}
  • 注意事项:
  • 1.所传入的形参必须是二级指针变量,因为二级指针用来存储一级指针变量的地址,即所申请的双向链表头结点在内存空间的地址
  • 2.形参传入到创建双向链表头结点的功能函数后,一定要做入参合理性检查
  • 3.同方法1一样,分配完头结点的内存地址空间后,一定要检查内存分配是否成功
  • 4.头结点的数据域(即链表元素)被赋值 -1
  • 5.头结点的指针域(含前驱、后继)被赋值 NULL
相关推荐
派森先生41 分钟前
sk08.【scikit-learn基础】--『监督学习』之K近邻算法
学习·scikit-learn·近邻算法
励志不掉头发的内向程序员44 分钟前
【Linux系列】解码 Linux 内存地图:从虚拟到物理的寻宝之旅
linux·运维·服务器·开发语言·学习
深盾科技2 小时前
C/C++逆向分析实战:变量的奥秘与安全防护
c语言·c++·安全
海洲探索-Hydrovo4 小时前
TTP Aether X 天通透传模块丨国产自主可控大数据双向通讯定位模组
网络·人工智能·科技·算法·信息与通信
_OP_CHEN4 小时前
C++基础:(十二)list类的基础使用
开发语言·数据结构·c++·stl·list类·list核心接口·list底层原理
谷歌开发者6 小时前
Web 开发指向标 | Chrome 开发者工具学习资源 (一)
前端·chrome·学习
2401_841495647 小时前
【计算机视觉】基于复杂环境下的车牌识别
人工智能·python·算法·计算机视觉·去噪·车牌识别·字符识别
Jonkin-Ma7 小时前
每日算法(1)之单链表
算法
奔跑吧邓邓子7 小时前
【C语言实战(8)】C语言循环结构(do-while):解锁编程新境界
c语言·实战·do-while
晚风残7 小时前
【C++ Primer】第六章:函数
开发语言·c++·算法·c++ primer