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