我怎样才能访问双向链表中的嵌套结构?
How might I be able to access a nested struct within a doubly linked list?
我正在尝试使用带有 header 结构的双向链表。我相信 header 结构只是应该保存列表中已创建的结构数量以及第一个和最后一个节点的计数。现在我看到两个问题。一个是将 header 结构连接到后续结构,第二个是访问我的列表节点(哨兵)中的嵌套结构。如果有人能阐明我可能做错了什么,将不胜感激。代码如下。
#include <iostream>
using namespace std;
typedef struct sentry sentry;
struct stud{
string name;
char grade;
};
struct slist {
int length;
sentry *first;
sentry *last;
};
struct sentry {
slist *list;
sentry *next;
sentry *prev;
stud *student;
};
int main(int argc, char** argv) {
slist list;
sentry *n;
n = new sentry;
// Full initialization of the header node.
list.first = n;
list.last = n;
list.length = 0;
n->prev = NULL;
n->next = NULL;
n->list = list->last;
n->student->name = "test";
n->student->grade = 'A';
cout << n->student->name << '\n';
cout << n->student->grade << '\n';
return 0;
}
为什么不修改 struct sentry 使其不包含 slist *list
?
为什么在 sentry
和 slist
之间需要 双向关系?这使得维护、读取和更新哨兵列表中的值变得乏味。没关系,释放堆上的内存以避免 内存泄漏 。为什么没有slist
(header)只有关于sentry
的信息。通过这种方式,您消除了 sentry
和 slist
.
之间双重绑定的复杂性
struct sentry {
sentry *next;
sentry *prev;
stud *student;
};
我正在尝试使用带有 header 结构的双向链表。我相信 header 结构只是应该保存列表中已创建的结构数量以及第一个和最后一个节点的计数。现在我看到两个问题。一个是将 header 结构连接到后续结构,第二个是访问我的列表节点(哨兵)中的嵌套结构。如果有人能阐明我可能做错了什么,将不胜感激。代码如下。
#include <iostream>
using namespace std;
typedef struct sentry sentry;
struct stud{
string name;
char grade;
};
struct slist {
int length;
sentry *first;
sentry *last;
};
struct sentry {
slist *list;
sentry *next;
sentry *prev;
stud *student;
};
int main(int argc, char** argv) {
slist list;
sentry *n;
n = new sentry;
// Full initialization of the header node.
list.first = n;
list.last = n;
list.length = 0;
n->prev = NULL;
n->next = NULL;
n->list = list->last;
n->student->name = "test";
n->student->grade = 'A';
cout << n->student->name << '\n';
cout << n->student->grade << '\n';
return 0;
}
为什么不修改 struct sentry 使其不包含 slist *list
?
为什么在 sentry
和 slist
之间需要 双向关系?这使得维护、读取和更新哨兵列表中的值变得乏味。没关系,释放堆上的内存以避免 内存泄漏 。为什么没有slist
(header)只有关于sentry
的信息。通过这种方式,您消除了 sentry
和 slist
.
struct sentry {
sentry *next;
sentry *prev;
stud *student;
};