![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| ZuTa |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 3.6.2009 Репутация: нет Всего: нет |
Здравствуйте!
Подскажите, пожалуйста, как реализовать бинарное дерево в C# ? Например в С++ можно написать такую структуру :
|
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
ZuTa, точно так же. только без "*". и не struct а class.
но это не серьезно, надо что бы все поля были скрытыми, доступ к ним через свойства/методы... и прочие штуки что бы код стал безопаснее и кошернее. |
|||
|
||||
| ZuTa |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 3.6.2009 Репутация: нет Всего: нет |
Спасибо!
Учту ваши пожелания |
|||
|
||||
| ZuTa |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 3.6.2009 Репутация: нет Всего: нет |
Экскалупатор,
|
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
оно не будет работать. потому что я могу любому узлу дерева присвоить любое значение, а суть бинарного дерева в том что оно должно само разбрасывать узлы и определять где и какой должен быть, т.е. при добавление нового узла в дерево, у тебя должен выполниться поиск места, в конец какой ветки добавить узел и туда должно быть записан новый узел. мне лично в реализации дерева удобно использовать рекурсивный спуск по дереву в поисках крайнего узла подходящего по значению.
Добавлено через 10 минут и 11 секунд и еще. на мой взгляд совершенно лишним является конструктор без параметров. потому что очевидно что узел дерева не может не содержать значения, а делать много узлов со значением 0 не имеет смысла(но это имхо). ну и не совсем понятно назначение Node Level. это уровень чего? и почему там храниться ссылка на какой то узел? |
|||
|
||||
| ZuTa |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 3.6.2009 Репутация: нет Всего: нет |
Экскалупатор, та я писал функцию для уже готового бинарного дерева (т.е. я не заботился о том как и куда добавлять - это делали другие).
На счет, конкруктора без параметров, согласен. А level - это уже особенность моей задачи. Но у меня возник вопрос : а как посчитать сколько памяти используется если задано дерево с грубиной T и N узлами ?(например, для С++ структуры, которую я написал в первом посте) Добавлено через 13 минут и 6 секунд
Читал когда-то, что указатель в памяти занимает 4 байта Если это правда, значит структура будет занимать 3*4=12 байтов правильно ли это ? |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 22 Всего: 118 |
указатель занимает в памяти не меньше sizeof(void*). Может больше - например указатели на функцию-член класса.. В стандарте С++ не определен размер указателя - зависит от архитектуры. И размер структуры будет sizeof(node). Т.к. в мире c++ существует выравнивание данных, что регулируется компилятором, если не задано явно используя #pragma pack(XXX) Аналогично, можно используя sizeof() в C# (в unsafe части кода) прикинуть размер... но всё это лишь приблизительная оценка будет. На самом деле сколько занимать памяти будет класс или структура никто не скажет. Это сообщение отредактировал(а) jonie - 3.3.2011, 08:32 -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
не совсем. есть же еще ссылка на саму структуру, плюс методы если они есть(конструктор, деструктор и пр.) тоже занимают место, но они обычно создаются в одном экземпляре на все объекты классов. в шарпе еще больше, там ссылка размещается в стеке + в куче выделяется память под все элементы класса + служебная информация.
в 32-битной ОС да. а мне показалось что мы обсуждаем именно само дерево а не работу с ним, по крайней мере весь код это само дерево, и никаких функций не было еще... |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |