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 |
|