Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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
C++ 双链表_C++_Algorithm_Doubly Linked List - Fatal编程技术网

C++ 双链表

C++ 双链表,c++,algorithm,doubly-linked-list,C++,Algorithm,Doubly Linked List,我在理解这段代码时遇到了一些困难。它工作得很好,但是我不理解它的某些部分 支持使用给定代码将文件添加到列表中。 但让我困惑的是 fNext->fPrevious=&阳极 fNext=&阳极 第一部分是为fNext->fPrevious赋值 但是,第二部分不是将fNext的值写入&Node吗 在这种情况下,fNext->fPrevious和fNext中的值不应该相同吗 谁能给我解释一下吗。我已经看过这些例子了,但是我理解双链表的概念,但是我不理解这段代码 也可以有人详细说明这一部分吗 Anodel

我在理解这段代码时遇到了一些困难。它工作得很好,但是我不理解它的某些部分

支持使用给定代码将文件添加到列表中。 但让我困惑的是

fNext->fPrevious=&阳极

fNext=&阳极

第一部分是为fNext->fPrevious赋值

但是,第二部分不是将fNext的值写入&Node吗

在这种情况下,fNext->fPrevious和fNext中的值不应该相同吗

谁能给我解释一下吗。我已经看过这些例子了,但是我理解双链表的概念,但是我不理解这段代码

也可以有人详细说明这一部分吗

Anodel.fPrevious=这个

 void DoublyLinkedNode<DataType>::append(Node& aNode)
{
    aNode.fPrevious = this;

    if (fNext != &NIL)
    {
        aNode.fNext = fNext;

        fNext->fPrevious = &aNode;

    }

    fNext = &aNode;   
}
void DoublyLinkedNode::append(节点和阳极)
{
Anodel.fPrevious=此;
如果(fNext!=&NIL)
{
阳极.fNext=fNext;
fNext->fPrevious=&阳极;
}
fNext=&阳极;
}
DoubleLinkedNode的构造函数如下所示

template<class DataType>
DoublyLinkedNode<DataType>::DoublyLinkedNode(const DataType& aValue)
{
    fValue = aValue;
    fPrevious = &NIL;
    fNext = &NIL;
}
模板
DoublyLinkedNode::DoublyLinkedNode(常量数据类型和aValue)
{
f值=有效值;
fPrevious=&NIL;
fNext=&NIL;
}
我现在感到困惑的是fNext->fPrevious和fNext之间的区别。两者都指向同一事物

不,他们不是。是的,我们确实将
fNext->fPrevious
设置为
&阳极
。但是在我们将
fNext
设置为
阳极后,
fNext
不是我们设置的
fp上一个
的节点,而是
阳极。所以
fNext->fPrevious
阳极.fPrevious
,它是
这个
,而不是
阳极

也许给所有这些节点起名字会有帮助,并以图形化的方式查看。在调用
append
之前,您有如下操作:

prev      this          next                   aNode
...   <-- fPrevious <-- fPrevious      NIL <-- fPrevious
fNext --> fNext     --> ...                    fNext     --> NIL
然后将
fNext->fPrevious
设置为
&阳极
。由于
fNext
当前是
next
节点,因此您正在将
next
的返回指针更改为指向
阳极的点:

prev      this          aNode         next
...   <-- fPrevious <-- fPrevious <-- fPrevious
fNext --> fNext \       fNext     --> ...
                 -------------------/
prev      this          aNode         next
...   <-- fPrevious <-- fPrevious <-- fPrevious
fNext --> fNext     --> fNext     --> ...

现在,
阳极
被正确地插入到链表中,在
这个
下一个
之间,每个人都同意所有事情。

有很多方法可以实现双链表。谢谢你指出这一点,但是你能解释一下代码中发生了什么吗?显示完整的代码,这样就可以回答问题了,但我认为作者正在尝试在两个节点之间添加一个新节点。fNext和Previous是连接相邻列表的指针,但我目前感到困惑的是fNext->fPrevious和fNext之间的区别。两者都指向同一事物。据我所知,上一个和下一个不应该指向同一个对象,但在这种情况下,我认为它是。代码运行良好,但我在理解它时遇到了一些困难。感谢它帮助我理解它,虽然我仍然有点困惑,但非常感谢@BIYAYDHAWA可能会帮助你在调试器中运行代码,甚至可以在线可视化器(尽管它的名字,它也处理C++)。但是,基于指针的结构是其中之一,你只需要不断地敲打你的头,直到突然你得到了抽象有意义的“啊哈”时刻。继续尝试是值得的,即使这并不容易。是的,我明白了,每次我看代码的时候我都觉得我懂了一点。谢谢你的图表,它帮了我很多忙
prev      this          aNode         next
...   <-- fPrevious <-- fPrevious <-- fPrevious
fNext --> fNext     --> fNext     --> ...