使用scanf为嵌套链表+分配内存

时间:2015-10-09 21:40:15

标签: c list malloc scanf

我正在努力为我的链表分配一个内存,它嵌入在它的父链表中 - 嵌套结构。

结构声明:

typedef struct parent
{
        int x;  
            struct embed    
            {
                int y; 
                int l; 
                struct embed *next;     
            }EMBED;
        struct parent *next;
}PARENT;

为父列表分配内存:

PARENT *head = NULL;
PARENT *temp = (PARENT*)malloc(sizeof(PARENT));

我无法弄清楚如何连接到嵌入式列表进行分配。有什么想法吗?

当我们分配内存并获得与嵌入式列表的连接时,我想使用scanf函数将一些数据存储到该列表中,但我不知道连接声明。它是如何工作的,有人能解释一下吗? 只是让你知道我在做什么,它是一个用于在树中搜索的学校项目 - 从A点开始,当B是输入数字时在B点结束,在它们之间是距离变量。所以基本上我想找到从达到B点的最短路径(更少的计算=短的执行时间)。

感谢您的建议。

2 个答案:

答案 0 :(得分:0)

正确定义结构后,您可以分配嵌入式列表元素,如下所示:

temp->EMBED.next = malloc(sizeof(struct embed));

答案 1 :(得分:0)

结构定义中不需要内部typedef。事实上,我的海湾合作委员会不喜欢它。这有效:

typedef struct parent
{
        int x;
        struct embed
        {
            int y;
            int l;
            struct embed *next;
        } embed;
        struct parent *next;
} PARENT;

有了这个,您可以使用以下内容分配和填充列表:

    PARENT p;
    /* build up a list */
    p.embed.next = NULL;
    for (i = 0; i < 5; i++) {
        struct embed *new = malloc(sizeof *new);
        new->next = p.embed.next;
        printf("enter a number:\n");
        scanf("%d", &new->y);
        p.embed.next = new;
    }