我正在浏览链表,我感到很困惑。也许我正在混合这个概念或其他东西。以下是创建标题节点的代码。
struct node
{
int data;
struct node *link;
};
node *head;
void main()
{
head = new node;
}
1)我想知道的第一件事是如何在同一节点结构中编写struct node *link;
?因为首先使用节点结构,然后我们可以声明指针。
2)node *head;
已经声明了一个大小节点的内存,那么我们需要再做一次head = new node;
?
答案 0 :(得分:1)
self referential struct可以包含指向自身的指针。请不要与指针大小混淆结构大小。无论数据类型如何,指针的大小都是恒定的。
struct node
{
int data;
struct node *link;
};
如果struct node *link
成为struct node link
之类的东西,它就不会像你想象的那样编译。
关于为什么需要使用new
进行分配,当我们执行node *head
时,它会说head
指向具有data
区域的实际节点的内存位置link
。
再次阅读pointer
概念可能会有用
答案 1 :(得分:0)
链接列表是一系列对象。你在这里做的是创建一个包含两个变量的结构。一个是存储在此节点中的日期。另一个是递归结构。这是链接列表获取其名称的位置。一个结构链接到下一个。创建此节点时,链接没有值,但您可以通过创建新节点并将其存储在链接中来添加节点。
至于你的其他代码,我不认为你做得对。通常,节点包含在链接列表类中,以便您可以通过添加,删除和搜索节点来控制链接列表。当您控制链接列表时,至少需要两个指针。一个指向列表中的第一个节点(也称为" head")。第二个指针是搜索指针,它将从头开始逐个节点地移动,直到找到您要查找的内容。
现在,当你写node* head
来回答你的第二个问题时,你只是在宣告指针。你没有声明"大小节点的记忆"所以在链接列表的初始化函数中,您需要创建第一个节点并使其指向它head = new node;