C语言 相同类型结构的指针中的结构


typedef struct roads road; 
typedef struct city city;

我正在实现一个代码,该代码有一条道路,边缘有两个城市,我将从文件中读取它们并使它们链接起来。结构就像

NewYork    250km    LosAngeles
LosAngeles 120km    Florida  

等等,我将拥有一个 ROADS 数组来存储我读过的道路。

struct city{
   char* city_name;
}
struct roads{
    int distance;
    struct city *next_city,*previous_city;
    struct roads **neigbors; // is this possible 
}
    size_t size = sizeof(road) + sizeof(city);
    road *ROADS = malloc(size);

这样的代码和分配的缺点是什么,我正在考虑为一个国家做一张地图。所有城市都应该有一个指向其邻居的指针,以便当有人问它们之间的距离是多少时,我的程序应该能够回答它。

char *city_name = malloc(sizeof(char)*length_of_name);
road *given_road = malloc(sizeof(road));
city *given_city = malloc(sizeof(city));

当涉及到邻居部分时;

for(index = 0; given_road[index] != NULL; index++)
    road *given_road->neighbors[index] = malloc(sizeof(city));

这部分和最后一部分是我感到困惑的部分,我唯一的链接参考是城市的名称;

if(strcmp(ROADS[i]->next_city->city_name,ROADS[j]->previous_city->city_name)){
    if(ROADS[i]->neighbors[0]==NULL)
        ROADS[i]->next_city = ROADS[j]->previous_city;
        ROADS[i]->neighbors[0] = ROADS[j]->previous_city;
        ROADS[j]->neighbors[0] = ROADS[i]->next_city; //I totally don't know what am I doing here}

我打算,如果 ROADS[i] city_name 中的道路与 ROADS[j] 的city_name相同(如洛杉矶示例),我将尝试通过邻居结构将它们连接起来,以便"纽约 250 公里洛杉矶"道路有一个邻居,即"洛杉矶 120 公里佛罗里达",反之亦然。如果从文件中读取"洛杉矶 500 公里内布拉斯加州"之类的内容,那么我首先提到的两条道路也将有两个邻居和两个链接。ROADS 数组现在存储 3 个道路结构。当然,当我制作道路结构时,我会为 ROADS 数组分配内存。每当有路来;

ROADS = realloc(ROADS,i*size + size);

我做错的点在哪里?任何提示对我来说都是完美的,可以进一步开发这段代码,甚至说"我应该搜索的概念"以做我想做的事情也会很棒。

我更愿意将我的图形存储为邻接列表。这也完全符合您存储边缘重量的要求。您可以使用城市名称的哈希值来更快地查找和比较折点。

为了解决你的帖子标题,在引用相同类型结构的结构中存储指针是完全有效的,并且一直在链表中使用,这是一个与您的用例非常相似的用例 - 例如,任何时候您需要将类似的结构链接在一起。

看看这个页面。

我看到您有一个额外的指向级别,您可以有一个指向结构的指针数组。对我来说似乎是一个合理的方法。

相关内容

  • 没有找到相关文章

最新更新