gpt4 book ai didi

c - 相同类型结构的指针内的结构

转载 作者:太空宇宙 更新时间:2023-11-04 04:54:22 24 4
gpt4 key购买 nike

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

这样的代码会有什么缺点和配置,我想做一个国家的 map 。所有城市都应该有一个指向其邻居的指针,这样当有人问它们之间的距离是多少时,我的程序应该能够回答。

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 相同(如 LosAngeles 示例),我将尝试通过 neighbors 结构将它们连接起来,以便“NewYork 250km LosAngeles”道路有一个邻居是“LosAngeles 120km Florida”,反之亦然。如果从文件中读取“LosAngeles 500km Nebraska”之类的内容,那么我首先提到的两条道路将有两个邻居和两个链接。 ROADS 数组现在存储 3 个道路结构。当然,我在制作道路结构时会为 ROADS 数组分配内存。每次有道路来时;

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

我哪里做错了?任何提示对于我进一步开发此代码都是完美的,甚至说“我应该搜索的概念”以便按照我的想法去做也很棒。

最佳答案

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

关于c - 相同类型结构的指针内的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10960640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com