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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2012, 23:10   #1
mazzahaker
Пользователь
 
Регистрация: 04.12.2011
Сообщений: 23
По умолчанию Двусвязный список

Добрый вечер, не могу написать функцию для добавления элемента в «середину» двусвязного списка
Получается добавление в начало и конец, а так не могу, подскажите пожалуйста? спасибо!
mazzahaker вне форума Ответить с цитированием
Старый 04.04.2012, 23:18   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Вам нужно перебросить 4 ссылки-указателя.
Пусть "a" - левый узел (см рисунок), "tmp" - вставляемый узел :
tmp.next=a.next;
tmp.next.last=tmp;
tmp.last=a;
a.next=tmp;
Изображения
Тип файла: jpg схема вставки.jpg (28.8 Кб, 197 просмотров)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 04.04.2012 в 23:22.
BDA на форуме Ответить с цитированием
Старый 04.04.2012, 23:27   #3
mazzahaker
Пользователь
 
Регистрация: 04.12.2011
Сообщений: 23
По умолчанию

Вот так?)
Код:
void List::addToList(string data)	
{
    Element *temp = new Element;	
    if(pHead == NULL)			
	{
temp->pred = NULL;		
//элемент т.к. его нет
		temp->next = NULL;		
        		pHead = temp;		
	}
else				
        		pPrev->next = temp;		
    temp->data = data;			
    temp->next = NULL;
    temp->pred = pPrev;    
    pPrev = temp;	 
    countElem++;	 
}
mazzahaker вне форума Ответить с цитированием
Старый 04.04.2012, 23:39   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Что такое pPrev?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 05.04.2012, 00:14   #5
mazzahaker
Пользователь
 
Регистрация: 04.12.2011
Сообщений: 23
По умолчанию

Код:
void List::addToList(string data)	//реализация функции добавления
{
    Element *temp = new Element;		//создается временный элемент
    if(pHead == NULL)			//если это первый элемент, то
	{
temp->pred = NULL;		//обнуляем указатель на предшествующий 
//элемент т.к. его нет
		temp->next = NULL;		//то же самое с последующим элементом
        		pHead = temp;		//"голова" указывает на созданный элемент
	}
else					//если не первый, то
        		pPrev->next = temp;		//предыдущий указывает на него
    temp->data = data;			//копируем данные
    temp->next = NULL;	//последующего элемента нет (добавляем же в конец)
    temp->pred = pPrev;     //указываем на предыдущий элемент, на который «нацелен» pPrev
    pPrev = temp;	  //а теперь хвостовой элемент указывает на последний (добавленный)
    countElem++;	  //увеличиваем счетчик элементов в списке
}
Вот программа с комментами
mazzahaker вне форума Ответить с цитированием
Старый 05.04.2012, 00:25   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Окей, но это добавление в конец списка. Вы же хотели добавление в середину?
Этот код, по моему мнению, правильный (только еще добавьте pPrev=pHead, когда создаете новый список, т.е. добавляете первый элемет списка).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 05.04.2012, 06:08   #7
mazzahaker
Пользователь
 
Регистрация: 04.12.2011
Сообщений: 23
По умолчанию

Не совсем понял Вас, можно подробнее?)
mazzahaker вне форума Ответить с цитированием
Старый 05.04.2012, 08:58   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от mazzahaker Посмотреть сообщение
...не могу написать функцию для добавления элемента в «середину» двусвязного списка...
Вы же привели код, который добавляет в конец списка.
Так что же вас заставило задать вопрос?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двусвязный список zais Общие вопросы C/C++ 3 20.11.2011 08:40
c++ двусвязный список world12_tk Помощь студентам 1 15.10.2011 12:36
Двусвязный список narcot Visual C++ 13 28.05.2011 21:12
двусвязный список Olezhka Помощь студентам 1 23.03.2011 11:00
двусвязный список klykovka Помощь студентам 8 22.05.2010 18:58