_数据结构_双向链表

双向链表结点

单链表的链式储存只有一个指示后继的指针域,所以,从某个结点出发只能顺指针往后寻查其他结点。若要寻查结点的直接前端,则需要从表头指针出发。
    为了克服单链表的单向性缺点,在双向链表的结点中有两个指针域,一个指向直接后继,一个指向直接前趋。

typedef struct double_list
{
   
	int val; //结点的值
	struct double_list* next; //后继结点的指针域
	struct double_list* pre;//前趋结点的指针域
}double_list;

在这里插入图片描述

双向链表初始化

首先malloc一个结点的空间,刚刚初始化的头节点,其前指针与后指针都赋值为空。

void inite(double_list** head)
{
   
	*head = (double_list*)malloc(sizeof(double_list));
	(*head)->next = NULL;
	(*head)->pre = NULL;	
}

这里有一个坑,为什么参数是二级指针?
    因为结点中还有前后的指针域,所以如果传递一级指针,则出了函数作用域,前后指针还是会返回默认的随机地址。

双向链表的插入

当新结点插入到链表当中时,与单链表操作相同,只不过多了一个前趋指针的指向,先将新结点的后指针指向后一个结点,前指针指向前一个结点,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值