簡體   English   中英

相同類型結構的指針內的結構

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM