Всем привет. Объясните пожалуйста, как добавить один односвязный список в другой. В одном списке хранится строка и число. В другом списке должен быть первый список и ещё одна строка.
Заранее спасибо за ответы.
Во втором списке значения переменных int первого списка разные.
P.S. Я студент, только учусь, поэтому всякие умнячие слова не используйте.
Измените указатель на следующий элемент последнего элемента первого списка с NULL на адрес первого элемента второго списка.
UPDATE
Структуры данных для списка складов. Склад представлен списком товаров.
Списки односвязные. Элементы запоминаются в "порядке стека".
struct product {
struct product *next;
char *title;
int qty;
};
struct store {
struct store *next;
char *title;
struct product *prod_list;
};
....
struct store *stores_list;
....
int main (int ac, char *av[])
{
// пусть каждый склад в своем файле
// прочтем все склады
struct store *stores_list = 0, *t;
for (int i = 1; i < ac; i++) {
t = get_store(av[i]);
t->next = stores_list;
stores_list = t;
}
....
}
Чтение продуктов и построение их списка для каждого склада аналогично.
Для краткости все проверки опущены.
struct strore *get_store (char *fname)
{
// допустим первая строка файла название склада, далее строки с товарами
// для простоты в формате NNN название товара
FILE *in = fopen(fname, "r");
char buf[4096];
fgets(buf, 4096, in);
struct store *store = (struct store *)malloc(sizeof(*store));
store->title = strdup(buf);
store->prod_list = 0;
while(fgets(buf, 4096, in) != EOF) {
char *p;
struct product *p = (struct product *)malloc(sizeof(*p));
p->qty = strtol(buf, &p, 10);
p->title == strdup(p+1); // по хорошему надо искать начало названия продукта "поточнее"
p->next = store->prod_list;
store->prod_list = p;
}
fclose(in);
return store;
}
Код не поверял, но д.б. как-то так.
В первом списке Вы храните указатель на строку и инт, а во втором, помимо строки, Вам нужно добавить указатель на список.
Вот немного псевдокода.
// ваш первый список
class FirstListNode {
FirstListNode *next;
int intValue;
char *stringValue;
};
class FirstList {
FirstListNode *head;
// methods
};
// ваш второй список
class SecondListNode {
char *stringValue;
FirstList *list;
};
class SecondList {
SecondListNode *head;
};
Надеюсь я правильно понял Ваш вопрос.
Продвижение своими сайтами как стратегия роста и независимости