|
Программирование >> Инициализация объектов класса, структура
void remove front(); void remove all (); таких операции: int remove( int value ); inline void i1ist:: remove front() if ( at front ) { ilist item *ptr = at front; at front = at front->next(); bump down size() ; delete ptr; Вот как выглядит реализация remove front() : remove all() вызывает remove front() до тех пор, пока все элементы не будут void ilist:: remove all() { while ( at front ) remove front(); size = 0; at front = at end = 0; удалены: Общая функция remove() также использует remove front() для обработки специального случая, когда удаляем1й элемент (элементы) находится в начале списка. Для удаления из середины списка используется итерация. У элемента, предшествующего удаляемому, необходимо модифицировать указатель next. Вот реализация функции: Помимо вставки элементов, необходима возможность их удаления. Мы реализуем три int ilist:: remove( int value ) { ilist item *plist = at front; int elem cnt = 0; while ( plist && plist->value() == value ) { plist = plist->next(); remove front(); ++elem cnt; if ( ! plist ) return elem cnt; ilist item *prev = plist; plist = plist->next(); while ( plist ) { if ( plist->value() == value ) { prev->next( plist->next() ); delete plist; ++elem cnt; bump down size(); plist = prev->next(); if ( ! plist ) { at end = prev; return elem cnt; else prev = plist; plist = plist->next(); return elem cnt; Следующая программа проверяет работу операций в четырех случаях: когда удаляемые элементы расположены в конце списка, удаляются все элементы, таких элементов нет или они находятся и в начале, и в конце списка. #include ilist.h int main() С++ для начинающих ilist mylist; cout << \n------ << тест << ---- #1: - элементы в конце\n mylist.insert front( 1 ); mylist.insert front( 1 ); mylist.insert front( 1 ); my1ist.insert front( 2 ); mylist.insert front( 3 ); my1ist.insert front( 4 ); mylist.display(); int elem cnt = mylist.remove( 1 ); cout << \n << Удалено << elem cnt << элемент(ов) со значением 1\n ; mylist.display(); mylist.remove all(); cout << \n----------------------------------------- << тест #2: - элементы в начале\n cout << \n << Удалено << элемент( ов) со значением 1\n ; mylist.display(); mylist.remove all () ; cout << \n------------ ;о << elem cnt о значением 1\n << тест #3: - элементов нет в списке\n cout << \n << Удалено << элемент( ов) со значением 1\n ; mylist.display(); mylist.remove all () ; ;о << elem cnt о значением 1\n cout \n- << тест << ---- #4: - элементы в конце и в начале\n --\n \n ; mylist.insert front( 1 ); mylist.insert front( 1 ); mylist.insert front( 1 ); mylist.display(); elem cnt = mylist.remove( 1 ); ---\n -\n ; mylist.insert front( 0 ); mylist.insert front( 2 ); mylist.insert front( 4 ); mylist.display(); elem cnt = mylist.remove( 1 ); ---\n -\n ; my1ist.insert front( 1 ); mylist.insert front( 1 ); my1ist.insert front( 1 ); my1ist.insert front( 0 ); mylist.insert front( 2 ); my1ist.insert front( 4 ); mylist.insert front( 1 ); my1ist.insert front( 1 ); mylist.insert front( 1 ); mylist.display() ; elem cnt = mylist.remove( 1 ); cout << \n << Удалено << elem cnt << элемент( ов) со значением 1\n ; --\n \n ;
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |