[英]Structure within pointers of the same type of structure
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中的道路相同(例如LosAngeles示例),我將嘗試使它們通過鄰居結構連接,以便“ NewYork 250km LosAngeles道路上有一個鄰居,即“洛杉磯120公里佛羅里達”,反之亦然。 如果從文件中讀取“ LosAngeles 500km Nebraska”之類的信息,那么我首先提到的兩條道路將具有兩個鄰居和兩個鏈接。 ROADS陣列現在可以存儲3個道路結構。 當然,當我構建道路結構時,我會為ROADS數組分配內存。
ROADS = realloc(ROADS,i*size + size);
我做錯的地方在哪里? 任何提示對於我進一步開發此代碼都是完美的,甚至說“我應該搜索的概念”以執行我所認為的事情也很好。
我希望將圖形存儲為鄰接表 。 這也非常適合您存儲邊緣重量的要求。 您可以使用城市名稱的哈希值來更快地查找和比較頂點。
要解決帖子的標題,將指針存儲在引用相同類型的結構的結構中是完全有效的,並且一直在鏈接列表中使用,這與您的用例非常相似-例如,任何時候您都需要將相似的鏈接在一起結構。
看一下這個頁面 。
我看到您有一個額外級別的指向,可以有一個指向結構的指針數組。 對我來說似乎是一種合理的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.