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

  • 方法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
相关推荐
地平线开发者1 小时前
征程6|YOLOv5x 在 Horizon 征程6 上的端到端部署实践(下)
算法·自动驾驶
BreezeJuvenile1 小时前
基于C语言的SPSC环形缓冲区程序实现
c语言·环形缓冲区
Canmag 兴隆磁性1 小时前
充磁的时候,磁铁里面到底发生了什么
学习·永磁材料·充磁·退磁
SuperByteMaster1 小时前
recursive mutex的使用场景和场景代码
c语言
speop1 小时前
llm-algo-leetcode |Task01
算法·leetcode·职场和发展
神威难绷泪1 小时前
数据结构:哈希表 算法相关 排序算法
数据结构
海兰1 小时前
【Kafka学习4】六大核心 API
学习·kafka·linq
知识分享小能手1 小时前
概理论与数理统计学习教程,从入门到精通,随机变量的数字特征 — 知识点总结与详细推导(7)
学习·机器学习·概率论
艾为电子1 小时前
【应用方案】电视沉浸式音频升级: 电视音频 awinic“芯片 + 算法” 一体化解决方案
算法·音视频
却道天凉_好个秋1 小时前
计算机网络:CDN
学习·音视频·cdn