сортировать вложенную структуру с одинарной связью и двойной

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 хотя они имеют общие поля?
Показать ещё 1 комментарий
Теги:
xcode
visual-c++
gcc

1 ответ

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
    Я сделал некоторые художественные работы, чтобы показать структуры для лучшего понимания

Ещё вопросы

Сообщество Overcoder
Наверх
Меню