Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2013, 12:26   #1
Alendorff
Форумчанин
 
Аватар для Alendorff
 
Регистрация: 04.06.2011
Сообщений: 104
По умолчанию C++, однонаправленные списки

Здравствуйте все. Я знаю, как добавить элемент в список, но если список у меня один. Как объяснить функции: в какой именно список нужно добавить элемент?

Код:
struct l1 {
int data;
l1* next;
};

struct l2 {
int data;
l2* next;
};

void add (?????)
{}
Заранее спасибо всем, кто не поленится ответить

Последний раз редактировалось Alendorff; 26.02.2013 в 12:35.
Alendorff вне форума Ответить с цитированием
Старый 26.02.2013, 12:36   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Передавайте в функцию переменную с типом struct l1 или struct l2 например. Если я не ошибаюсь это так делается.
Код:
typedef struct l1 {
int data;
l1* next;
} l_1;

typedef struct l2 {
int data;
l2* next;
} l_2;
Поправка на C++ Ваш синтаксис допускается
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!

Последний раз редактировалось Bugrimov; 26.02.2013 в 16:00.
Bugrimov вне форума Ответить с цитированием
Старый 26.02.2013, 13:56   #3
Alendorff
Форумчанин
 
Аватар для Alendorff
 
Регистрация: 04.06.2011
Сообщений: 104
По умолчанию

Простите, но я не понял, что значит то, что Вы дописали после структуры:
Цитата:
} l_2;
Что это и для чего? Что за необходимые типы
Цитата:
компилятор не ругается на эту запись???
Ммм... видимо никогда не ругался ни C++ Builder 6, ни g++, так как я вечно пишу эту звездочку то слитно с именем, то слитно с типом данных...
_____________
Так суть всего вопроса в чем:
нужно функции как-то объяснить в какой лист добавлять список... не писать же мне две одинаковые функции добавления элемента для разных списков...
Я сначала подумал сделать что-то вроде
Код:
void add (l1 *head, int a) {...}
но опять же у голов моих списков разные типы данных... у одного l1, а у другого l2 и что делать?

Последний раз редактировалось Alendorff; 26.02.2013 в 13:59.
Alendorff вне форума Ответить с цитированием
Старый 26.02.2013, 15:50   #4
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Звездочка тут вовсе не причем
По простому - typedef преобразует запись struct l1 в более кототкую l_1
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 26.02.2013, 15:53   #5
Alendorff
Форумчанин
 
Аватар для Alendorff
 
Регистрация: 04.06.2011
Сообщений: 104
По умолчанию

В любом случае толку от этого никакого
Alendorff вне форума Ответить с цитированием
Старый 26.02.2013, 15:54   #6
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Где и как вы объявляете указатель на начало списка *head?
Можно сделать так, объявить две переменные *head_l1, *head_l2
Код:
if(...) // первый список
add(head_l1, a);
else
add(head_l2, a);
Хотя возможно такой вариант Вам и не подходит. Получается функция add должна вызываться с разными типами head
l1 *head и l2 *head. Интересная тема, есть над чем подумать.
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!

Последний раз редактировалось Bugrimov; 26.02.2013 в 16:10.
Bugrimov вне форума Ответить с цитированием
Старый 26.02.2013, 18:05   #7
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Как объяснить функции: в какой именно список нужно добавить элемент?
функция получает указатель на начало списка. Вторая структура вам точно нужна?
rrrFer вне форума Ответить с цитированием
Старый 28.02.2013, 13:01   #8
Alendorff
Форумчанин
 
Аватар для Alendorff
 
Регистрация: 04.06.2011
Сообщений: 104
По умолчанию

Ну, по крайней мере мне уж точно нужно два списка.
Да, в том и дело, что типы данных указателей на начало списка будут разными.
Alendorff вне форума Ответить с цитированием
Старый 28.02.2013, 13:03   #9
Alendorff
Форумчанин
 
Аватар для Alendorff
 
Регистрация: 04.06.2011
Сообщений: 104
По умолчанию

Цитата:
Где и как вы объявляете указатель на начало списка *head?
Ну, да, здесь я не написал. Ну, видимо, в начале main'а где-то...

Цитата:
Можно сделать так, объявить две переменные *head_l1, *head_l2
Да, но они будут разных типов В том и проблема... Хочу, чтобы функции можно было объяснить как-то в какой именно список добавлять элемент.
Alendorff вне форума Ответить с цитированием
Старый 28.02.2013, 15:35   #10
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Цитата:
Сообщение от Alendorff Посмотреть сообщение
Да, но они будут разных типов В том и проблема... Хочу, чтобы функции можно было объяснить как-то в какой именно список добавлять элемент.
написать разные функции для каждого типа структуры с каждым названием, или же иметь дело с перегрузкой функций.

и там и там вам придется писать для каждой структуры действия, хотя и типичные...
p.s. если я правильно вас понял...
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Однонаправленные списки *cash* Помощь студентам 1 02.05.2012 02:07
Однонаправленные списки *cash* Помощь студентам 3 01.05.2012 00:22
Однонаправленные списки. tema654 Общие вопросы C/C++ 3 29.12.2011 14:49
Однонаправленные списки в си Марсель059 C++ Builder 18 27.11.2009 13:16