链接列表:结构中的结构?
Linked Lists: structure inside a structure?
在使用 C++ 中的链接列表方面,我仍然有点陌生。我正在翻阅我的教科书,在链接列表部分找到了这个头文件。
//Specifcation file for the NumberList class
#ifndef NUMBERLIST_H
#define NUMBERLIST_H
class NumberList
{
private:
//Declare a structure for the list
struct ListNode
{
double value; //The value in this node
struct ListNode *next; //To point to the next node
};
ListNode *head; //List head pointer
public:
//Constructor
NumberList();
{ head = nullptr; }
//Destructor
~NumberList();
//Linked list operations
void appendNode(double);
void insertNode(double);
void deleteNode(double);
void displayList() const;
};
#endif
所以我想知道struct ListNode *next;
那一行到底发生了什么
好像是一个指针,那为什么非要在这个指针上加上“struct”部分呢?起初我很困惑,因为我认为它是另一个结构内部的结构。
有人可以给我解释一下吗?
So I am wondering what exactly is happening on the line where it says struct ListNode *next;
正如你后面提到的,它是一个指针,指向struct ListNode
的下一个块。检查下图。这里的ListNode
由Data
和Next
组成。 Next
是指向下一个 ListNode
单元格的指针。
It seems to be a pointer, so why do we have to include the "struct" part on this pointer?
是C-style
声明。在 C 中,struct
名称在它们自己的命名空间中。在 C++
中你不需要这个。你在这里看到它是因为 C++
在这种情况下也支持 C-style
声明。您可以在此处查看我编辑的代码。我从 ListNode 结构内的 next
指针声明中删除了 struct
部分,它工作正常。
#include <iostream>
using namespace std;
class NumberList
{
private:
//Declare a structure for the list
struct ListNode
{
double value; //The value in this node
ListNode *next; //To point to the next node
};
ListNode *head; //List head pointer
public:
//Constructor
NumberList() { head = nullptr; }
NumberList(double val) {
head = new ListNode();
head->value = val;
}
//Destructor
~NumberList();
//Linked list operations
void appendNode(double);
void insertNode(double);
void deleteNode(double);
void displayList() {
ListNode *curr = head;
while(curr != nullptr) {
cout << curr->value << " ";
curr = curr->next;
}
cout << endl;
}
};
int main()
{
NumberList *nl = new NumberList(5.0);
nl->displayList();
return 0;
}
在使用 C++ 中的链接列表方面,我仍然有点陌生。我正在翻阅我的教科书,在链接列表部分找到了这个头文件。
//Specifcation file for the NumberList class
#ifndef NUMBERLIST_H
#define NUMBERLIST_H
class NumberList
{
private:
//Declare a structure for the list
struct ListNode
{
double value; //The value in this node
struct ListNode *next; //To point to the next node
};
ListNode *head; //List head pointer
public:
//Constructor
NumberList();
{ head = nullptr; }
//Destructor
~NumberList();
//Linked list operations
void appendNode(double);
void insertNode(double);
void deleteNode(double);
void displayList() const;
};
#endif
所以我想知道struct ListNode *next;
那一行到底发生了什么
好像是一个指针,那为什么非要在这个指针上加上“struct”部分呢?起初我很困惑,因为我认为它是另一个结构内部的结构。
有人可以给我解释一下吗?
So I am wondering what exactly is happening on the line where it says
struct ListNode *next;
正如你后面提到的,它是一个指针,指向struct ListNode
的下一个块。检查下图。这里的ListNode
由Data
和Next
组成。 Next
是指向下一个 ListNode
单元格的指针。
It seems to be a pointer, so why do we have to include the "struct" part on this pointer?
是C-style
声明。在 C 中,struct
名称在它们自己的命名空间中。在 C++
中你不需要这个。你在这里看到它是因为 C++
在这种情况下也支持 C-style
声明。您可以在此处查看我编辑的代码。我从 ListNode 结构内的 next
指针声明中删除了 struct
部分,它工作正常。
#include <iostream>
using namespace std;
class NumberList
{
private:
//Declare a structure for the list
struct ListNode
{
double value; //The value in this node
ListNode *next; //To point to the next node
};
ListNode *head; //List head pointer
public:
//Constructor
NumberList() { head = nullptr; }
NumberList(double val) {
head = new ListNode();
head->value = val;
}
//Destructor
~NumberList();
//Linked list operations
void appendNode(double);
void insertNode(double);
void deleteNode(double);
void displayList() {
ListNode *curr = head;
while(curr != nullptr) {
cout << curr->value << " ";
curr = curr->next;
}
cout << endl;
}
};
int main()
{
NumberList *nl = new NumberList(5.0);
nl->displayList();
return 0;
}