C++ c++;理解循环双链表

C++ c++;理解循环双链表,c++,C++,当我添加一个至少有一个现有节点的节点时,我在弄清楚如何为上一个和下一个设置ptr时遇到了一个问题。添加第一个节点很容易,只需将PTR设置在前面。我需要心理上的帮助,这个程序也是一个队列,所以每个节点都被添加到列表的后面 if (Empty()) { front = new qnode; front->next=front; front->prev=front; front->data = item;

当我添加一个至少有一个现有节点的节点时,我在弄清楚如何为上一个和下一个设置ptr时遇到了一个问题。添加第一个节点很容易,只需将PTR设置在前面。我需要心理上的帮助,这个程序也是一个队列,所以每个节点都被添加到列表的后面

if (Empty())
    {
        front = new qnode;
        front->next=front;
        front->prev=front;
        front->data = item;
    }
    else if (front->prev=front)
    {
        front->prev = new qnode;
        front->prev->next= front;
        front->next=front->prev;
        front->prev->data = item;
    }
    else
    {

    }
我现在所拥有的还没有得到

else
    {
        front->prev= new qnode;
        front->prev->data= item;
        front->prev->next=front;
        front->prev=front->prev->prev;

    }

我不确定您为什么需要一个
else if
,因为我认为一个元素的情况与多个元素的情况没有什么不同。在任何情况下,您都会遇到语法错误-您希望编写
=
而不是
=

更重要的是,您要做的是:

  • 创建一个新的qnode
  • 将新节点的数据设置为项目
  • 将新节点的下一个设置到前面
  • 将新节点的prev设置为front->prev
  • 将前面的prev设置为新节点

您可以在一张纸上自己检查这是如何工作的。

我不确定您为什么需要
,如果需要,则需要
,因为我认为一个元素的情况与多个元素的情况没有什么不同。在任何情况下,您都会遇到语法错误-您希望编写
=
而不是
=

更重要的是,您要做的是:

  • 创建一个新的qnode
  • 将新节点的数据设置为项目
  • 将新节点的下一个设置到前面
  • 将新节点的prev设置为front->prev
  • 将前面的prev设置为新节点

您可以在一张纸上自己检查这是如何工作的。

我不确定您为什么需要
,如果需要,则需要
,因为我认为一个元素的情况与多个元素的情况没有什么不同。在任何情况下,您都会遇到语法错误-您希望编写
=
而不是
=

更重要的是,您要做的是:

  • 创建一个新的qnode
  • 将新节点的数据设置为项目
  • 将新节点的下一个设置到前面
  • 将新节点的prev设置为front->prev
  • 将前面的prev设置为新节点

您可以在一张纸上自己检查这是如何工作的。

我不确定您为什么需要
,如果需要,则需要
,因为我认为一个元素的情况与多个元素的情况没有什么不同。在任何情况下,您都会遇到语法错误-您希望编写
=
而不是
=

更重要的是,您要做的是:

  • 创建一个新的qnode
  • 将新节点的数据设置为项目
  • 将新节点的下一个设置到前面
  • 将新节点的prev设置为front->prev
  • 将前面的prev设置为新节点

您可以在一张纸上自己检查这是如何工作的。

在循环双链接列表中,您有两个指针,一个指向头部,一个指向尾部(列表中的最后一个元素)。如果一个元素有一个next,那么下一个元素的prev应该是通过它的下一个元素指向它的元素。 除非移除头部元素,否则头部指针不得移动。你的尾巴会一直向前移动,确保它指向的元素的头部是下一个元素。
希望这有助于

在循环双链接列表中,您有两个指针,一个指向头部,一个指向尾部(列表中的最后一个元素)。如果一个元素有一个next,那么下一个元素的prev应该是通过它的下一个元素指向它的元素。 除非移除头部元素,否则头部指针不得移动。你的尾巴会一直向前移动,确保它指向的元素的头部是下一个元素。
希望这有助于

在循环双链接列表中,您有两个指针,一个指向头部,一个指向尾部(列表中的最后一个元素)。如果一个元素有一个next,那么下一个元素的prev应该是通过它的下一个元素指向它的元素。 除非移除头部元素,否则头部指针不得移动。你的尾巴会一直向前移动,确保它指向的元素的头部是下一个元素。
希望这有助于

在循环双链接列表中,您有两个指针,一个指向头部,一个指向尾部(列表中的最后一个元素)。如果一个元素有一个next,那么下一个元素的prev应该是通过它的下一个元素指向它的元素。 除非移除头部元素,否则头部指针不得移动。你的尾巴会一直向前移动,确保它指向的元素的头部是下一个元素。
希望这会有所帮助

因为您总是在末尾添加元素,因此具有单个元素的队列的情况与具有多个元素的列表的情况相同。拿一张纸和一支笔,画一些草图,这对你来说会很容易。

因为你总是在末尾添加,所以带有单个元素的队列的情况与带有多个元素的列表的情况是相同的。拿一张纸和一支笔,画一些草图,这对你来说会很容易。

因为你总是在末尾添加,所以带有单个元素的队列的情况与带有多个元素的列表的情况是相同的。拿一张纸和一支笔,画一些草图,这对你来说会很容易。

因为你总是在末尾添加,所以带有单个元素的队列的情况与带有多个元素的列表的情况是相同的。拿一张纸和一支笔,画一些草图,你会觉得很简单。

我希望这张图片能帮上一点忙

我已经为1个项目2个项目和3个项目创建了图片

指针只指向实际对象,这意味着如果前面是蓝色,前面是棕色,则黑色矩形就是整个对象(这些只是作为参考)

我真的希望这有助于链表可以变得非常棘手和绘图总是帮助我

因此,要将项目添加到列表的前面,您可以使用如下代码:

 //ok first I'll define some variables for you
 //last === the last node in the list
 //head === the first node in the list
 //node === the new node you are adding;
 qnode node = new qnode;
 node.data = data; //whatever data you are holding
 node->next = last; //last element in the list since it is circular;
 node->prev = head; //you want the new node to point the the first node since it's getting added before that;
 head->next = node; //you want the head of the node to point to the new node not the last item
 last->prev = node; //last node now should point to the new node you just added not the head;

我希望这张图片能帮助你