Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
учебник с,с++.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
68 Кб
Скачать
☆

Урок 36. Получаем элемент списка по его номеру

Наш метод, который будет получать указатель на элемент списка по его номеру, будет называться GetAt. Добавьте его объявление в класс:

class CList

{

public:

...

// Взятие n-го элемента.

CData * GetAt(int n);

...

Реализация у него будет такая:

CData * CList::GetAt(int n)

{

// Указатель на очередные данные в списке.

CData * pCurr = m_pFirst;

// Если список пуст

// или элемента с таким номером просто нет,

// то возвращаем NULL.

if(pCurr == NULL || n>GetCount()-1)

{

return NULL;

}

// Добираемся до элемента с нужным номером.

for(int i=0; i<GetCount(); i++)

{

if(i==n)

{

return pCurr;

}

pCurr = pCurr->m_pNext;

}

return NULL;

}

Алгоритм тут прост и естественен - мы просто перебираем все элементы, начиная с первого. Как только добираемся до n-го, так и выходим. Перед этой несложной операцией мы убеждаемся, что элемент с таким номером существует вообще (если нет, то просто возвращяем NULL).

C/C++

Урок 36. Получаем элемент списка по его номеру

Наш метод, который будет получать указатель на элемент списка по его номеру, будет называться GetAt. Добавьте его объявление в класс:

class CList

{

public:

...

// Взятие n-го элемента.

CData * GetAt(int n);

...

Реализация у него будет такая:

CData * CList::GetAt(int n)

{

// Указатель на очередные данные в списке.

CData * pCurr = m_pFirst;

// Если список пуст

// или элемента с таким номером просто нет,

// то возвращаем NULL.

if(pCurr == NULL || n>GetCount()-1)

{

return NULL;

}

// Добираемся до элемента с нужным номером.

for(int i=0; i<GetCount(); i++)

{

if(i==n)

{

return pCurr;

}

pCurr = pCurr->m_pNext;

}

return NULL;

}

Алгоритм тут прост и естественен - мы просто перебираем все элементы, начиная с первого. Как только добираемся до n-го, так и выходим. Перед этой несложной операцией мы убеждаемся, что элемент с таким номером существует вообще (если нет, то просто возвращяем NULL).

C/C++

Урок 37. Сортируем элементы списка

Продолжим работу с нашим списком, начатую на 28-м уроке

Для сортировки элементов списка мы воспользуемся методом пузырьков. Алгоритм его приблизительно такой - просматриваем элементы нашего списка соседними парами от начала до конца. Т. е. сначала смотрим пару нулевого и первого элементов, потом первого и второго и т. п. В каждой паре при необходимости меняем элементы - если они стоят не в том порядке. Так доходим до конца списка. Если мы поменяли хотя бы одну пару, то повторяем все с начала - т. е. начинаем смотреть пары от начала и до конца. И так будем делать до тех пор, пока при очередном проходе мы ничего не поменяем - тогда список и окажеться отсортированным.

Приступаем к коду.

В класс CList добавим объявление метода Sort:

class CList

{

public:

...

// Сортировка.

void Sort();

...

Добавим, естественно, и реализацию для этого метода:

void CList::Sort()

{

bool b; // Меняли ли соседние элементы списка?

do

{

b = false; // пока ничего не меняли.

// Смотрим элементы до предпоследнего.

for (int i = 0; i<GetCount()-1; i++)

{

if (GetAt(i)->a > GetAt(i+1)->a)

{

Change(GetAt(i));

b = true;

}

}

}while (b);

}

С этим методом все.

C/C++