![]() |
|
Модераторы: bsa |
![]()
|
|
| afanp |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 25.11.2008 Репутация: нет Всего: нет |
Просьба помочь со списками(как создававать список, выводить) У кого какая есть информация, советы. Смотрел в "Фундаментальных алгоритмах " ,но там к сожалению мало что понял. Понимаю зачем нужны указатели на начало и на следущий элемент, но как их правильно записать - хз.Поэтому надеюсь на вашу помощь.
|
|||
|
||||
| 666TEHb666 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 5.10.2008 Где: Новокузнецк Репутация: нет Всего: нет |
Однонаправленные списки делаются легко,я когда-то на билдере в институте делал их,жаль исходники удалил((так бы скинул.У меня остался код алгоритма ток на Турбо Паскале(на нем учился),я те приведу ниже его.Если голова на плечах есть и руки запросто переведешь в си))
Суть в том,что имеется некий класс,назовем его Tnode или в этом роде.Состоит он из необходимых свойств(переменные int string или что тебе надо чтобы в списке было.Кроме этого есть указатель(nextnode) того же типа что и класс.Имеется некоторый базовый указатель,скажем root,типа Tnode.Вначале он занулен.Ну и потом описываешь разные функции для работы со списком.Создание его - выделяешь память root и даешь значение внутренним полям,nextnode зануляешь.Чтобы создать следующий вглубь узел, объявляешь локальную переменную типа Tnode,run=root,пишешь run->nextnode=new Tnode(); Продвигаешься путем run=run->nextnode; И т.д. Не разберешься совсем(даже по коду) в личку пиши,мож помогу если время будет..Хотя лучше сам ;) P.S. Меню естественно делаешь на форме))Паскалевскую консоль в топку))В билдере все это легко делается..
Это сообщение отредактировал(а) 666TEHb666 - 26.11.2008, 20:03 |
|||
|
||||
| afanp |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 25.11.2008 Репутация: нет Всего: нет |
666TEHb666, забыл указать, что классы мы еше не проходили, и делаем все на основе структур
еще вся беда в том, что не могу понять в какой момент нужно направлять указатель вроде бы как должен быть один на NULL, и каждый связыватся с последущим. Хз как это сделать Это сообщение отредактировал(а) afanp - 26.11.2008, 20:26 |
|||
|
||||
| 666TEHb666 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 5.10.2008 Где: Новокузнецк Репутация: нет Всего: нет |
Структуры в C++ рассматриваются как классы правда без многих приятных моментов, но все же.Я писал список на структурах,потом препод посоветовал просто заменить слово struct на class,так что с ними и знакомиться особо тогда не пришлось..но если на структурах то тож самое,пиши вместо класса структуру и все.Также указатель типа структуры и т.д.
NULL ток последний указатель(первоначально root,потом root->nextnode,потом root->nextnode->nextnode и т.д.).Когда необходимо создать следующий элемент списка,он(nextnode) получает память а следовательно(он ведь того же типа что и структура) поле nextnode,так как теперь это поле(указатель) последнее то зануляем его.root->nextnode=NULL.Потом при необходимости опять выделяем память ему root->nextnode=new Tnode().У нас новый nextnode,зануляем его(он ведь теперь последний).Вот и весь алгоритм,суть его.Пробег по списку осуществляеьтся как я уже сказал Tnode *run=root;run=run->nextnode.И т.д.Чтоб например последний элемент найти запускаешь цикл аля while(run->nextnode!=NULL) run=run->nextnode; Таким образом найдешь последний элемент и можешь добавлять новый узел в конец списка аля run->nextnode=new Tnode();run->nextnode->nextnode=NULL; Все еще непонятно?))А вообще есть очень большое количество литературы посвященной спискам,деревьям,очередям и т.д.Та и в нете мануалей полно.Почитай,интересно;) Если совсем непонятно написал,то может завтра коль будет время напишу те эти списки,но лучше бы чтоб сам конечно понял..Если вы потом начнете изучать их сортировку...запаришься))Разбирай сразу.Я помнится долго делал сортировку хэш-таблицами,в нете почему-то мало инфы про них,да и в книгах чот не нашел у с..тогда я помучался))но сделал...Лан это все лирика,думай)У тя ночь впереди)) P.S.ностальгирую по первому курсу...)) хех.. Это сообщение отредактировал(а) 666TEHb666 - 26.11.2008, 21:09 |
|||
|
||||
| afanp |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 25.11.2008 Репутация: нет Всего: нет |
вотъ ( Ну кто подскажет че надо исправить? Это сообщение отредактировал(а) afanp - 27.11.2008, 18:23 |
|||
|
||||
| Black_Wolf |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 25.6.2007 Где: Свердловская обла сть Репутация: нет Всего: нет |
afanp
10-я строка. Не "=" ,а "==". И не хорошо как то получается, уходим и не убираем за собой. В односвязном списке указатель на первый элемент лучше не изменять, а завести еще один указатель на текущий элемент в списке. Это сообщение отредактировал(а) Black_Wolf - 28.11.2008, 12:49 |
|||
|
||||
| afanp |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 25.11.2008 Репутация: нет Всего: нет |
а как удалить 1ый элемент из списка? вот када мы удаляем из середины то мы тупо перенаправляем например с 1ого на 3ий, а со 2ого на третий обнуляем. А как быть с первым?
|
|||
|
||||
| Black_Wolf |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 25.6.2007 Где: Свердловская обла сть Репутация: нет Всего: нет |
afanp
У тебя в программе должен быть указатель который всегда указывает на первый элемент в списке. Когда удаляешь первый элемент, просто записываешь в этот указатель адрес элемента который следует за первым.
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |