![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| BlHol |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 26.11.2005 Репутация: нет Всего: нет |
День добрый!
Колупаю я так, потихоньку Java, и вот добрался до темки "Связанный список". Определение дано такое: связанный список является некоторой совокупностью объектов, где каждый объект в списке имеет ссылку на следующий объект. Вроде, все понятно. Но дальше предлагается код:
И этот класс используется для создания полилинии:
Когда я создал класс для проверки всего этого, выплыла интересная деталь: сначала ссылке на следующий элемент присваивается ссылка на след. эл-т (т.е. то, что и должно быть), но затем самому элементу присваивается след. эл-т(т.е. ссылка и сам элемент одно и то же) . Плюс ко всему, элемент списка start (т.е. начальный элемент) всегда имеет ссылку на след. эл-т равной null. Вот и хочу понять это так и должно быть или это опечатки в книге? Заранее благодарен. С уважением. |
||||
|
|||||
| LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Если ты про этот:
код, то тут все правильно. Вначале создается новый элемент списка newEnd. Если список пустой, то он становится и первым и последним его элементом. Если же в списке уже есть элементы, то последний элемент становится предпоследним и поэтому у него указателю на предпоследний элемент присваивается newEnd. Далее указателю на последний элемент присваивается newEnd. Указатель на следующий элемент у элемента start будет инициализирован при вставке второго элемента списка. Когда в списке один элемент start и end указывают на один и тот же ListItem, поэтому
влияет не только на end, но и на start. P.S. Просто пройдись по коду под дебагером, многое станет очевидно. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
| BlHol |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 26.11.2005 Репутация: нет Всего: нет |
Я дико извиняюсь, но там ведь end.next = newEnd - это, я так понимаю, указатель на последний элемент. И end= newEnd , т.е. получается, что и сам элемент и указатель на следующий элемент - это одно и то же?
Заранее спасибо. |
|||
|
||||
| Alexandr87 |
|
||||||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 9 Всего: 39 |
newEnd - это вновь созданный элемент, который пока еще не в списке.
следовательно он не равен newEnd. После того, как этот элемент будет внесен в список (в его конец)
его пометят последним
Это сообщение отредактировал(а) Alexandr87 - 21.4.2007, 17:35 |
||||||
|
|||||||
| BlHol |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 26.11.2005 Репутация: нет Всего: нет |
Спасибо.
Только я, видимо, чего-то недопонимаю. Т.е., если на словах алгоритм таков: 1. Создается элемент типа связанного списка (но пока не в списке) 2. Он (ссылка на него) присваивается ссылке на следующий элемент у того элемента, который является в списке последним 3. Он присваивается самому последнему элементу. Так? Заранее спасибо. |
|||
|
||||
| Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 9 Всего: 39 |
так толку не будет, почитайте литературу по теме "связанные списки"
|
|||
|
||||
| BlHol |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 26.11.2005 Репутация: нет Всего: нет |
Так, собственно, из литературы и взято. Там и определение и схемы. Все понятно, пока до кода не доходит....
|
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
В Java работа идет только по ссылкам. Т.е. start, end, end.next и т.д. это все ссылки. 1. Создается элемент типа связанного списка (но пока не в списке) 2. Ссылка на него присваивается ссылке на следующий элемент у того элемента, который являлся в списке последним 3. Ссылка на него присваивается ссылке на последний элемент списка -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
Так понятнее?
![]() Добавлено через 1 минуту Размер картинки (в байтах) позволяет использовать её даже в качестве аватара. ;) -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| BlHol |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 26.11.2005 Репутация: нет Всего: нет |
Спасибо большое! Примерно, понятно. Примерно, такую же схему я видел. Она, абсолютно, понятна. Проблема в том, что, в моем понимании, код (вышеприведенный) расходится с этой схемой. Потому как было бы понятно, если бы next было бы = nextElem, а Elem оставался бы самим собой, а то получается, что ссылки Elem и next равны.
Т.е. если, грубо говоря, мы превращаем переданный массив в связанный список, то, в моем понимании, Elem должен быть равен array[0], а next быть равен array[1], а получается что сначала Elem1.next = array[0], а затем, сразу за ним Elem1 становится равным array[0]. Так? Заранее благодарен... |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Нет не так. В качестве звений связанного списка испольузются специальные объекты ListItem-ы, которые содержат указатель на следующий элемент (next) и указатель на данные (item). Поэтому elem0.item будет равен array[0], а не сам elem0. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| BlHol |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 26.11.2005 Репутация: нет Всего: нет |
||||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Где ты это увидел? elem0.next НЕЛЬЗЯ присвоить array[0] без явного приведения типов, да и то скорее всего получим ошибку времени исполнения. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| BlHol |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 26.11.2005 Репутация: нет Всего: нет |
Смотрим.
Предположим, присвоение идет в цикле
В итоге имеем:
теперь присваиваем:
Где я ошибаюсь, тогда? Заранее спасибо. с уважением. |
||||||
|
|||||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
С какого следующий элемент array[0]? newEnd - это ListItem, но никак не array[0]. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |