![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 03.11.2008
Сообщений: 94
|
![]()
Прошу помочь разобраться в формировании линейных списков, ибо в учебниках ничерта не понятно. Язык Си
Как я понял список это цепочка звеньев. Допустим имеется структура: Код:
Если мы обьявим к примеру: Код:
если наш массив BUF заполнен случайными числами например {1,6,3,2,7,9,3,0,3,5} и нам нужно создать список, упорядоченный по убыванию, то найти первое звено в цепочке не составляет труда, но как присваивать root значение его индекса? root->next=BUF[i]? И допустим мы имеем в руте начало списка, необходимо ведь чтобы каждое звено имело указатель на следующее, но ведь массив мы не отсортируем, тогда как ? |
![]() |
![]() |
![]() |
#2 | |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,087
|
![]() Цитата:
И причем здесь массивы вообще? Представьте очередь в больнице. Вы не знаете кто 5-й, кто 6-й. Знаете только кто перед Вами и всё. Тут та же история. Чтобы определить кто от вас пятый, вы спрашиваете у своего соседа: "кто четвертый?" Тот у своего соседа уже спросит: "кто третий?" и т.д. и к Вам вернется потом так же по цепочке ответ кто всёже пятый. Потом, допустим, вашему соседу срочно на работу приспичило и он ушел из очереди. Вы просто меняете указатель next на его соседа и всё. Вообще списки не предназначены для обращения по индексу. ЗЫ. Для сортировки больше двусвязный список подходит, т.к. там указатели в оба направления имеются и перемещение элементов списка проще будет |
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 03.11.2008
Сообщений: 94
|
![]()
Хорошо, но если сосед ушел и не сказал кто был перед ним?) И стоим мы в очереди не строго в линию первый, второй и.т.д, а в куче.
Или представим другой вариант. Пришла толпа в больницу. Как обьяснить одному человеку что он первый, а вот тот человек за ним стоит, тому что этот человек перед ним а вот тот что вдалеке после него и т д. Т.е в самой программе как это указывается? какими функциями? Последний раз редактировалось [MI_nor]; 26.04.2009 в 22:37. |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,087
|
![]()
Значит Вы потерялись из списка и будете весь день ждать своей очереди, но указатель на вас потерялся и потому очередь до вас не дойдет
![]() Ну и элементы списка в памяти не в одном месте располягаются |
![]() |
![]() |
![]() |
#5 | |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,087
|
![]() Цитата:
В программе что-то вроде: Код:
|
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 03.11.2008
Сообщений: 94
|
![]()
хм, иначе говоря если к примеру у этих больных есть номерные карточки то приходит человек видит очередь, спрашивает у последнего его номер, если он меньше дает по морде и залазит на его место, а другой встает за ним, и.т.д ???
|
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,087
|
![]()
Ну если это описана сортировка, то да. При обычном заполнении никаких проверок не требуется, кроме проверки на пустоту списка. Так же удобно хранить указатель не только на первый элемент, но и на последний элемент, чтобы при заполнении списка каждый раз от первого по цепочке не пробегать в поиска последнего
|
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 03.11.2008
Сообщений: 94
|
![]()
Хм, появился еще аопрос. Пытаюсь сортировать односвязный список:
Код:
Последний раз редактировалось [MI_nor]; 27.04.2009 в 05:12. |
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 26.02.2009
Сообщений: 51
|
![]() Последний раз редактировалось Nomlpppp; 27.04.2009 в 06:58. |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
с++ списки | Blizzz | Общие вопросы C/C++ | 3 | 04.12.2008 21:19 |
Списки | Bremlin | Microsoft Office Excel | 10 | 04.11.2008 15:13 |
списки | Влдислаав3911 | Паскаль, Turbo Pascal, PascalABC.NET | 5 | 10.05.2008 17:35 |
Списки | AVer | Паскаль, Turbo Pascal, PascalABC.NET | 6 | 06.12.2006 23:05 |