LPDOUBLEITEM node = new DOUBLEITEM();
// новый узел равен узлу головы списка
LPDOUBLEITEM pointer = m_Root;
// ищем конец списка
while( pointer != NULL && pointer->Next != NULL )
pointer = pointer->Next;
// если список уже существует
if ( pointer != NULL ) pointer->Next = node; else m_Root = node;
// переприсваеваем указатели
node->Prev = pointer;
// записываем данные
node->Data = new USERDATA( Item->Name, Item->Birthday );
// прибавляем количество
m_Count++;
// возврат результата
return ( result = true );
}
// вставляем в любое место
bool CDoubleList::Insert( LPUSERDATA Item, int Index )
{
// результат
bool result = false;
// переприсваиваем голову списка
LPDOUBLEITEM temp = m_Root;
// объявляем переменную
int i = 0;
// ищим нужное место для вставки
while ( temp != NULL && temp->Next != NULL )
{
// если нашли - выпадаем отсюда
if ( i++ == Index ) break;
temp = temp->Next;
}
// если середина ...
if ( m_Root != NULL )
{
// создаем новый узел
LPDOUBLEITEM node = new DOUBLEITEM();
// копируем в него значения
node->Data = new USERDATA( Item->Name, Item->Birthday );
// определяем предыдущий узел
node->Prev = temp;
// назначаем следующий, если таковой может быть
if ( temp->Next != NULL )
{
node->Next = temp->Next;
temp->Next->Prev = node;
}
// вставляем в список
temp->Next = node;
// прибавляем количество
m_Count++;
// все успешно
result = true;
}
// возврат результата
return result;
}
// удаление выбранного элемента
bool CDoubleList::DeleteAt( int Index )
{
// результат
bool result = false;
// присваиваем голову списка
LPDOUBLEITEM temp = m_Root;
// переменная для поиска
int i = 0;
// если не корректно введеный индекс
if ( Index < 0 || Index >= m_Count ) return false;
// ищем нужный элемента
while ( temp->Next != NULL )
{
// нашли ? - выпадаем
if ( i++ == Index ) break;
temp = temp->Next;
}
// если это элемент из средины списка
if ( temp->Next != NULL && temp->Prev != NULL )
{
temp->Prev->Next = temp->Next;
temp->Next->Prev = temp->Prev;
// уменьшаем количество
m_Count--;
result = true;
}
// если это элемент из конца списка
if ( temp->Next == NULL && temp->Prev != NULL )
{
temp->Prev->Next = NULL;
// уменьшаем количество
m_Count--;
result = true;
}
// если это элемент из начала списка
if ( temp->Next != NULL && temp->Prev == NULL )
{
m_Root = temp->Next;
temp->Next->Prev = NULL;
// уменьшаем количество
m_Count--;
result = true;
}
// если это последний элемент
if ( m_Root != temp )
{
// удаляем его
delete temp;
temp = NULL;
}
else
{
// удаляем его
delete m_Root;
m_Root = NULL;
}
// все класс
return result;
}
// удаление выбранного элемента
bool CDoubleList::DeleteAt( LPUSERDATA Item )
{
// рузультат
bool result = false;
// присваиваем головной узел
LPDOUBLEITEM temp = m_Root;
// ищем необходимый узел
while ( temp->Next != NULL )
// нашли ? - выпадаем
if ( temp->Data == Item ) break;
// если это элемент из средины списка
if ( temp->Next != NULL && temp->Prev != NULL )
{
temp->Prev->Next = temp->Next;
temp->Next->Prev = temp->Prev;
// уменьшаем количество
m_Count--;
result = true;
}
// если это элемент из конца списка
if ( temp->Next == NULL && temp->Prev != NULL )
{
temp->Prev->Next = NULL;
// уменьшаем количество
m_Count--;
result = true;
}
// если это элемент из начала списка
if ( temp->Next != NULL && temp->Prev == NULL )
{
m_Root = temp->Next;
temp->Next->Prev = NULL;
// уменьшаем количество
m_Count--;
result = true;
}
// если это последний элемент
if ( m_Root != temp )
{
// удаляем его
delete temp;
temp = NULL;
}
else
{
// удаляем его
delete m_Root;
m_Root = NULL;
}
// все класс
return result;
}
// удаляем все
bool CDoubleList::DeleteAll()
{
// рузельтат
bool result = false;
// узел для удаления
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.