Advanced Linked List

最近一直在做malloc project。 前两篇malloc project的简单介绍已经说明完成这个malloc真的要动用很多知识。我和我partner rho 同学第一个任务就是把free memory block的organization变成 doubly linked list。 于是我想在此用一篇文章介绍一下 doubly linked list。

先来看一下我们lab时候给的code。 这个是doubly linked list一个node。 我们可以看到在这个struct里面,有一个指向下一个node的pointer,

struct word_data {
	const char *word;
	unsigned int count;
	struct word_data *next;
	struct word_data *prev;
};
insert1 

上图就是这个doubly linked list。我们现在的任务是把一个新的node insert到这个list里面。比如说我们想把这个新的node加入到dummy head和它右边的这个node之间。我们先把这个右边node的prev变成这个新的node,然后把这个新的node的next变成右边这个node。这样我们的任务就完成了一半。另一半的任务就是把这个新的node的prev变成dummy head,然后把dummy head的next变成这个node。这样的话我们insert的任务就完成了。

insert-dummy1

这个empty doubly linked list挺有意思。因为这个dummy header的prev和next都是它自己。如果你想加入第一个node怎么办呢。先把这个dummy head的prev变成这个新的node,然后把这个新的node的next变成dummy head。然后把这个dummy head的next变成这个node,把这个node的prev变成dummy head。其实两个顺序反过来也是可以的。

现在来说说如何从一个doubly linked list里面把一个node删掉。如果我想删掉dummy haed之后的那个node。我先把dummy head的next变成要删的那个node之后的node,然后把要删的node之后的node的prev变成dummy head。

要是想从一个node的doubly linked list里面把那个node删掉也很简单。就是把dummy head的next和prev都point到它自己就好了。

其实就算对doubly linked list小小的介绍吧。在这个malloc中会用到doubly linked list连接free block以加快搜寻fit free block的速度。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值