c - 指向结构体的指针数组

标签 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 是 id500大小变量,2> 是区域 A 附近的区域 (nadj) 数量,后面是区域。现在,我的老师说,id Area附近的区域必须存储在指向struct Area的指针数组中(pArea adj[3],它必须在max 3 Areas),但我不知道如何填充该数组,而只使用区域的名称,就像上面的示例中的那样,当它们的类型为 struct Area 而不是数组时。

最佳答案

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

    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++)

关于c - 指向结构体的指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43562702/

相关文章:

matlab - MATLAB 中所有可能的参数组合的条件选择

c - 我在 C 中看到了什么奇怪的东西?

c - 当我唯一关心的是大小时,使用全局变量而不是 malloc() 是否有缺点?

arrays - R:在大数组中查找最接近的值并返回维度

arrays - 将 C 字符数组转换为字符串

java - Android 中的 for 循环在项目之间创建间隙

c - List 断言 ` l !=NULL' 失败

c - 制作引用结构

c - 为什么指向结构的指针会使程序崩溃?

c - 从终端读取 input.txt 文件和 output.bmp 文件(C 编程)