我在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 而不是数组时。
答案 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++)