2014-03-05 53 views
0

我有嵌套爲:排序嵌套結構單聯和雙

typedef struct a{ 
    const char *  LongName; 
    const char *  ShortName; 
    int     a; 
    struct a *  next; 
}Level5; 

typedef struct a1{ 
    const char *  LongName; 
    const char *  ShortName; 
    int     frequency5; 
    int     id; 
    Level5 *   linked; 
    struct a1*   next_a1; 
}Level4; 

typedef struct a2{ 
    const char  * Name; 
    int     frequency4; 
    Level4  *  linked; 
    int     id; 
    struct a2 *  next; 
}Level3; 

typedef struct a3{ 
    const char *  LongName; 
    const char *  ShortName; 
    int     frequency3 
    int     id; 
    Level3  *  linked; 
}Level2; 

typedef struct a4{ 
    const char *  LongName; 
    const char *  ShortName; 
    _Bool   top; 
    int    id; 
    int    frequency2; 
    Level2  * lined; 
}Level1; 


typedef struct cat{ 
    int   id; 
const char * CatName; 
Level1  * linked; 
}CAT; 

CAT  total[256]; 

現在我要排序的鏈接嵌套結構結構,如:

1. Level 5 -> LongName 

2. Level 4 -> ShortName 

3. Level 3 -> Name 

4. Level 2 -> Frequency3 

       Level 1 
        | 
        | Level 2 
    ==================================================== 
    | Level3   |Level3   |level 3 
=============  
|  next  next 
level4 ->  lev4 -> lev4 
|    | 
|     ===================================== 
===============================  |  
|  next  next   Level5 -> level5 -> level5 
Level5 -> Level5 -> level5 
+0

需要說明:是否所有項目都按照等級先按專業排序? –

+0

是否所有5級項目都按「LongName」排序,即使它們共享公共字段? –

+0

@ThomasMatthews第一個問題的答案是肯定的,那就是我要找的。 LongName在每個結構中都不相同。對於安裝level5 abc然後level4 def level3 ghi level2 jkl level1 xzy。名稱可能相同,但每個結構的值不同 – Vineet1982

回答

0

看起來你有以下數據結構:

Level5 node --> Level5 node --> Level5 node 
    | 
    v 
Level4 node --> Level4 node --> Level4 node 
    | 
    v 
Level3 node --> level3 node --> Level3 node 
    | 
    v 
Level2 node --> level2 node --> Level2 node 

如果是這樣,您的數據結構可以簡化:

struct Node 
{ 
}; 

struct Node_Row 
{ 
    unsigned int level; 
    std::list<Node> nodes_in_row; 
}; 

struct data_structure 
{ 
    std::list<Node_Row> levels; 
}; 

您應該有一個比較函數,它對行進行排序,而另一個比較函數對這些級別進行排序。

此外,由於您將問題標記爲C++,因此您應該爲自己節省一些麻煩並使用std::string而不是char *std::string爲您管理動態內存分配和釋放,而char *則管理內存分配和釋放。

+0

我已經完成了一些ascii藝術作品以顯示更好理解的結構 – Vineet1982