C-链接列表节点内存分配



在创建链接列表时,我们制作了一个节点结构,它由数据和下一个节点的指针组成。稍后,当我们发挥函数以将元素附加到链接列表上时,我们将创建一个临时节点来存储输入的数据。

让我们考虑以下程序 -

#include<stdio.h>
struct node
{
  int data;
  struct node* link;
}
struct node* root=NULL;
void main(append)
{
  struct node* temp;
  temp= (struct node*)malloc(sizeof(struct node))
  .....
}

我的第一个问题集:

在第11行中,为什么我们需要在Malloc功能之前提及(struct node*)

这是什么意义?

我的第二个问题集:

如果我们正在制作一个双链接列表,该列表具有由2个指针组成的节点结构(对于下一个和上一个节点),我们还将初始化结构节点类型的指针(用于遍历列表)?

在这种情况下,有其他方法可以初始化指针吗?

重要性是在程序中制作错误,

malloc将返回void*,当您分配给struct somthing*时,它将自动转换。

您根本不抛出 malloc的结果,因为它返回了 void*。这里有一个很好的解释

更好的解决方案可能是:

struct node *temp;
temp = malloc(sizeof *temp);

为什么我们需要提及'(struct node*)'在malloc函数之前 这是什么意义?

通过在malloc函数之前编写(struct node*),您将返回值键入指定类型。这里的演员是可选的,经常被皱眉。

如果我们正在制作一个双链接列表,该列表将有一个节点 结构由2个指针组成(...

进行双重链接列表时,您应该声明类似的内容:

struct node {
    int data;
    struct node *next;
    struct node *previous;
};

您可以使用malloc函数为节点分配空间。nextprevious指针再次是struct node s的指针。再次致电malloc以分配next元素的空间。对于第一个节点,previous应为NULL,对于最后一个节点,next应为NULL。这是一个实现。

这是因为malloc的返回类型无效*。(struct node*)是一种使用它的演员,您告诉编译器您想将Malloc返回的值视为结构节点的指针。

对于可以使用的双链接列表,

struct node
      {
       int data;
       struct node *next,*prev;
       };
int main()
{
   struct node *new_node=(struct node *)malloc(sizeof(node));
}

malloc返回void指针(可以在标题上检查和验证),因此在将其分配给其他类型的变量时,必须进行类型铸造。

请求您在链接上阅读https://www.tutorialspoint.com/cprogramming/c_type_casting.htm

相关内容

  • 没有找到相关文章

最新更新