Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Voprosy_po_proge_otvety.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
44.93 Кб
Скачать
  1. Связные списки. Понятие контейнера, определение и классификация связных списков. Преимущества связных списков перед массивами.

Контейнер в информатике: Программный объект, содержащий в себе тем или иным образом набор значений (объектов) одного или различных типов, и позволяющий обращаться к этим значениям. • Массив • Многомерный массив • Список • Стек • Очередь • И т.д.

Свя́зный спи́сок: Структура данных, состоящая из узлов, каждый из которых содержит как собственные данные, так и одну или две ссылки («связки») на следующие и/или предыдущие узлы. По количеству связей списки разделяют на односвязные и двусвязные.

Преимущества перед массивом - Гибкость: порядок элементов связного списка может не совпадать с порядком расположения элементов данных в памяти компьютера, а порядок обхода списка всегда явно задаётся его внутренними связями.

Пример двусвязного списка:

Struct books

{

Int nomer;

string name;

string author;

int page;

int cost;

books* next; //Указатель на следующий

books* back; //Указатель на предыдущий

};

Примеродносвязногосписка:

Struct books

{

Int nomer;

string name;

string author;

int page;

int cost;

books* next; //Указатель на следующий

};

  1. Связные списки. Добавление элемента в начало, в конец, в произвольную позицию списка. Сравнение с добавлением в массив. Примеры.

Добавление элемента в конец списка:

struct books

{

//… books* next;

}; books* end(books* book) //Поиск конца списка

{

while (book->next != NULL) //пока есть элементы

book = book->next; //переходим к следующему элементу

return book;

} int _tmain(int argc, _TCHAR* argv[])

{ books* start = NULL;//Указатель на первый элемент

books* current = NULL;//Указатель на текущий элемент

if (start == NULL)

{

current = new books;

start = current;

current->next = NULL;

}

else

{

current = end(start);

current->next = new books;

current = current->next;

current->next = NULL;

} //… return 0;

}

Добавление элемента в начало списка:

//… books* tmp = NULL; //Указатель на временный элемент

if (start == NULL)

{//… }

else

{

tmp = new books;

tmp->next = start;

start = tmp;

} //… return 0;

}

Добавление элемента в произвольную позицию списка:

books* add_rand(books* leftbook, books* newbook) // leftbook - Послекотороговставляем

{ // newbook - Новыйэлемент

if (leftbook != NULL)

{

newbook->next = leftbook->next;

leftbook->next = newbook;

}

returnnewbook;

}

Для вставки элемента в массив нужно:Взять исходный массив;Выделить память под новый массив достаточного размера;Скопировать элементы старого массива в новый;Освободить память занимаемую старым массивом;Присвоить указателю на старый массив, указатель на новый.

Время выполнения операции вставки элемента в произвольную позицию массива и время удаления элемента из произвольной позиции линейно зависит от количества элементов массива. O(n).

Время выполнения операции вставки элемента в произвольную позицию списка и время удаления элемента из произвольной позиции постоянно (т.е. не зависит от количества элементов списка). O(1)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]