05.09.2016 Views

Стефан Р. - С++ Для чайников

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Сначала функция removed проверяет, не пуст ли список. Если список пуст,<br />

функция возврашает 0 (поскольку в этом случае объекта *pLC точно нет в списке).<br />

Если список не пуст, remove О просматривает все элементы списка, пока не найдет<br />

искомый объект. Если функция находит объект, она присваивает текущему указателю<br />

pNext значение указателя pNext из найденного объекта. Было бы неплохо, если бы,<br />

внимательно рассмотрев приведенный фрагмент, вы могли сказать, в каком случае он<br />

будет работать неправильно.<br />

Свойства связанных списков<br />

Связанные списки имеют все те преимущества, которых нет у массивов. Связанные<br />

списки могут удлиняться и укорачиваться по мере добавления или удаления элементов.<br />

Добавление объекта в середину списка выполняется легко и быстро — при этом<br />

нет необходимости перемещать существующие элементы. Кроме того, сортировка элементов<br />

в связанном списке проводится гораздо быстрее, чем в массиве элементов.<br />

Недостаток работы со связанными списками состоит в том, что поиск определенного<br />

элемента затруднен по сравнению с аналогичной операцией в массивах. К элементам<br />

массива легко обратиться посредством индекса, тогда как в связанном списке<br />

это сделать невозможно. Иногда программа должна прочитать весь список для поиска<br />

одного элемента.<br />

JlfiOiftcuuta fjnked&stData<br />

Программа LinkedListData использует связанный список для хранения списка<br />

объектов, содержащих имена студентов и их номера социального страхования.<br />

// LinkedListData — хранит имена студентов<br />

// в связанном списке объектов<br />

#include <br />

#include <br />

#include <br />

// NameDataSet — содержит имена и номера социального<br />

// страхования<br />

class NameDataSet<br />

{<br />

public:<br />

char szFirstName[128];<br />

char szLastName [128];<br />

int nSocialSecurity;<br />

};<br />

// связь со следующим элементом списка<br />

NameDataSet* pNext;<br />

// указатель на первый элемент списка<br />

NameDataSet* pHead = 0;<br />

// addTail — добавляет новый элемент в связанный список<br />

void addTail(NameDataSet* pNDS)<br />

{<br />

// сразу же обнулим указатель на следующий элемент,<br />

// поскольку этот элемент будет последним в списке<br />

pNDS->pNext = 0;<br />

// если список пуст,<br />

// то головной указатель должен будет<br />

168 Часть ///. "Классическое" программирование

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!