Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Список в списке


Автор: Aaron 1.4.2007, 07:33
Задание: список - каждый элемент является заголовком односвязного списка. Элемент списка второго уровня содержит указатель на строку. (Включение элемента последним в список производить с учетом выравнивания длины текущего и следующего списков).

Как я понял, в списке первого уровня (внешнем), должен быть массив из элементов, каждый элемент которого должен содержать заголовок второго (внутреннего) списка, причем кол-во списков второго уровня не должно быть ограничено, т.е. скажем, внутренний список может хранить максимум 4 элемента, и если мы добавляем 5, то создается второй список второго уровня и элемент дописывается туда, при его заполнениии создается 3ий и т.д.

Не могу понять, как это правильно реализовать....сама основа подобной структуры. Внешний список:

struct list{
    char **str;
    list *next;
    list *pred;
};

соответственно, заголовки должны быть элементами char **str...но как здесь реализовать создание списка второго уровня?

Автор: zkv 1.4.2007, 08:22
Цитата(Aaron @  1.4.2007,  07:33 Найти цитируемый пост)
Задание: список - каждый элемент является заголовком односвязного списка. Элемент списка второго уровня содержит указатель на строку. (Включение элемента последним в список производить с учетом выравнивания длины текущего и следующего списков).
 заголовком - корнем что ли? Насчет выравнивания не понял. Дальше тоже не понял о чем вы говорите
Код

struct LIST_INTERNAL{
    char *charData;
    LIST_INTERNAL *internalNext;
};

struct LIST_EXTERNAL{
    LIST_EXTERNAL *internalRoot;
    LIST_EXTERNAL *externalNext;
    LIST_EXTERNAL *externalPrev;
}g_externalRoot;

Автор: MAKCim 1.4.2007, 09:08
создаешь
Код

struct list_head {
    struct list_head *previos, *next;
};

struct level_2_list_entry {
    char    *ptr;
    struct list_head link; /* для связи элементов списков 2-го уровня */
};

struct level_2_list {
    struct level_2_list_entry    entry;
};

struct level_1_list_entry {
/* тут могут быть дополнительные поля */
    struct level_2_list    list;
    struct list_head    link; /* для связи элементов списков 1-го уровня */
};

struct level_1_list {
    struct level_1_list_entry     entry;
};

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)