指向结构的指针数组

时间:2017-04-22 18:00:44

标签: c arrays struct linked-list

我在C a Zoo编写了一个学校项目的代码。哪里有区域和动物。我们必须使用动态结构。我正在尝试做区域而且我被卡住了。我正在使用链表。

结构

typedef struct area Area, *pArea;

    struct area{
       char id[10];
       int size, nadj;
       pArea prox; //for linked list

       pArea adj[3]; ///array of pointers to the struct area
    };

填写清单

void fill(pArea p){
    printf("ID: ");
    scanf(" %10[^\n]", p->id);
    printf("Size: ");
    scanf(" %d", &p->size);
    printf("Nadj: ");
    scanf(" %d", &p->nadj);

    if(p->nadj == 0)
        for(int i = 0; i < p->nadj; i++)
            p->adj[i] = NULL;   
    else    
           //stuck here. HELP
    }

    p->prox = NULL;
 }
  

AreaA 500 2 AreaB AreaC

AreaA id 500 尺寸变量, 2 是AreaA附近的区域数( nadj ),其后是区域。现在,我的老师说 id区附近的区域必须存储在一个指向struct Area的指针数组中( pArea adj [3] ,它必须在最大值3区域)但我不知道如何填充该阵列,而只使用上面示例中的区域名称,当它们是 struct Area 而不是数组时。

1 个答案:

答案 0 :(得分:0)

您需要维护从区域名称到区域的某种地图。然后

    for (int i = 0; i < p->nadj; i++) {
        name = read_name();
        p->adj[i] = find_area_by_name(name);
    }

其中find_area_by_name,其名称应该如其名称所示。根据您需要处理的区域数量(以及类的级别),您可以像线性查找一样简单地实现它,或者像AVL树一样实现它。

顺便说一句,

if(p->nadj == 0)
    for(int i = 0; i < p->nadj; i++)
        p->adj[i] = NULL;   

实际上是无操作。由于仅在p-nadj == 0时输入循环,因此它等同于

    for(int i = 0; i < 0; i++)