带头节点的循环双链表 我应该在C++中实现一个带有头节点的循环双链表。
我的教授给了我这个算法,但我不明白它的用途 我应该在哪里以及如何使用preced、follow和out 在带头节点的循环双链表 我应该在C++中实现一个带有头节点的循环双链表。,c++,data-structures,linked-list,doubly-linked-list,C++,Data Structures,Linked List,Doubly Linked List,我的教授给了我这个算法,但我不明白它的用途 我应该在哪里以及如何使用preced、follow和out 在prefore中有一个“p”,我不知道它从何而来,在follow方法中的r也是如此,在out方法中的p和r也是如此,但我认为它们可能只是一个新的E2*,所以我创建了这个 class E2 { public: E2* prev; E2* next; int key; E2() { prev = this; next = th
prefore
中有一个“p”,我不知道它从何而来,在follow
方法中的r也是如此,在out
方法中的p和r也是如此,但我认为它们可能只是一个新的E2*
,所以我创建了这个
class E2 {
public:
E2* prev;
E2* next;
int key;
E2() {
prev = this;
next = this;
};
};
void precede(E2* q, E2* r) {
//insert (*q) before (*r)
E2* p = new E2();
p = r->prev;
q->prev = p;
q->next = r;
p->next = r->prev = q;
}
void follow(E2* p, E2* q) {
E2* r = new E2();
r = p->next;
q->prev = p;
q->next = r;
p->next = r->prev = q;
}
void out(E2* q) {
E2* r = new E2();
E2* p = new E2();
p = q->prev;
r = q->next;
p->next = r;
r->prev = p;
q->prev = q->next = this;
}
在out方法中,“this”给了我一个错误,它说:“this”只能在prefore方法中的非静态成员函数中使用:
p是一个临时变量。它用于命名R之前的任何节点。想象一个包含两个节点a和R的双链接列表。Prefore方法将在R之前插入一个节点Q。下面的步骤是:
将R前面的节点标记为p。因此,A被标记为p。现在我们将在p和R之间插入Q
将p作为Q的上一个节点,R作为Q的下一个节点。p的下一个节点仍然是R。同样,R的上一个节点仍然是p。我们在下一步中改变这一点李>
将Q标记为p的下一个和R的上一个
您可以使用相同的逻辑来理解follow函数
在remove方法中,p和r是q的上一个和下一个节点。在这里,我们需要在它们之间创建一个双链接(即将r标记为p的下一个,将p标记为r的上一个)。这将删除节点q
希望这有帮助。E2*p=new E2();p=r->prev代码>这里您失去了指向刚刚分配的节点的指针。这些函数更常见的名称是“preced”=“push front”和“follow”=“push back”。正如下面回答的,p
只是一个临时变量(不是分配的节点),并按照函数描述中所示进行分配。“this”在“out”方法中的含义是什么?this指针保存当前对象的地址,简单地说,这个指针指向类的当前对象。参考