Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 双链表数组的实现_Arrays_Arraylist_Data Structures_Linked List_Doubly Linked List - Fatal编程技术网

Arrays 双链表数组的实现

Arrays 双链表数组的实现,arrays,arraylist,data-structures,linked-list,doubly-linked-list,Arrays,Arraylist,Data Structures,Linked List,Doubly Linked List,我刚刚开始研究数据结构,我需要了解双链表,它由3个数组实现——数据、下一个、上一个 我想实现delete函数,它接收一个值,并从数组中删除它 我有一个指向列表头的指针L和一个指向数据数组中第一个自由元素的无指针 我想实现它,我知道我需要更新所有3个阵列 以下是我在psu中删除第一个元素的尝试: Delete(value) if L == -1 : return -1 if D[L] == value: temp = N[L] N[L] = FREE

我刚刚开始研究数据结构,我需要了解双链表,它由3个数组实现——数据、下一个、上一个

我想实现delete函数,它接收一个值,并从数组中删除它

我有一个指向列表头的指针L和一个指向数据数组中第一个自由元素的无指针

我想实现它,我知道我需要更新所有3个阵列

以下是我在psu中删除第一个元素的尝试:

Delete(value)
   if L == -1 : return -1
   if D[L] == value:
      temp = N[L]
      N[L] = FREE
      FREE = L
      L = temp
上面的代码不会更新p(Prev)数组

我不确定我应该如何更新p,但我认为我应该这样做:

Delete(value)
   if L == -1 : return -1
   if D[L] == value:
      P[FREE] = L
      temp = N[L]
      N[L] = FREE
      FREE = L
      L = temp 
      P[L] = P[FREE]

正确吗?

首先编写一个函数来查找列表中的值:

Find(值)
节点=L
while节点!=-1:
如果D[node]==值:
返回节点
node=N[节点]
返回-1
然后,删除功能可以是:

Delete(值)
节点=查找(值)
如果节点==-1:
返回-1
D[node]=0#可选数据擦除
#调整指向已删除节点的链接
如果节点==L:
L=N[节点]#删除第一个节点
其他:
N[P[node]]=N[node]
如果N[节点]!=-1:
P[N[节点]]=P[节点]
#从“删除”节点调整链接
P[节点]=-1;
N[节点]=空闲
#自由列表的前置
P[FREE]=节点
自由=节点
返回节点

太棒了!非常感谢你的帮助!我已经测试过几次了,现在我理解正确了,非常感谢!