Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

SHANDLE

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

struct tagList
{
  int nInfo;
  tagList* pNext;
  tagList* pPrev;
};
 
Это один элемент списка
pNext указывает на следующий элемент, равен 0 для последнего элемента
pPrev указывает на предыдущий элемент, равен 0 для первого элемента;
 
У списка есть заголовок
tagList Head;
 
Head.pNext указывает на первый элемент
Head.pPrev указывает на последний элемент
(к примеру так, нужно ведь знать где начинается список, а где он заканчивается)
Список можно пролистать, начав с головы, и используя ссылки tagList::pNext,
или, начав с хвоста, и используя ссылки tagList::pPrev
 
Чтобы выдернуть элемент из списка нужно переставить указатели в предыдущем и следуюшем элементах.
 
tagList *pCurrent; // этот элемент нужно выдернуть
 
tagList *pNext = pCurrent->pNext;
if (pNext)
{
// есть следующий элемент,  
  pNext->pPrev = pCurrent->pPrev;
}
else
{
// это последний элемент, нужно поправить заголовок
  Head.pPrev = pCurrent->pPrev;
}
 
tagList *pPrev = pCurrent->pPrev;
if (pPrev)
{
// есть предыдущий элемент,  
  pPrev->pNext = pCurrent->pNext;
}
else
{
// это первый элемент, нужно поправить заголовок
  Head.pNext = pCurrent->pNext;
}
 
// Теперь pCurrent нет в списке
 
// Листаешь список, проверяешь информационное поле, если оно четно, то выдергиваешь этот элемент

Всего записей: 928 | Зарегистр. 19-01-2007 | Отправлено: 14:09 24-10-2008 | Исправлено: SHANDLE, 14:11 24-10-2008
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru