Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Структуры данных - лекция: связный список

Anton
January 11, 2025

Структуры данных - лекция: связный список

Лекция курса "Структуры данных"
Связный список

- Строительные блоки программы
- Последовательность элементов: список
- Массив в качестве списка с произвольным добавлением элементов?
- Связный список
- Расположение в памяти
- Поиск, обращение по индексу
- Обход элементов
- Односвязный список, двусвязный список
- LinkedList vs ArrayList
- Задания для самостоятельной работы

Anton

January 11, 2025
Tweet

More Decks by Anton

Other Decks in Education

Transcript

  1. Строительные блоки программы • Переменные • Операторы: присвоение, логика, арифметика

    • Последовательное выполнение программы • Условные операторы, циклы • Подпрограммы • Массивы • Структуры, классы
  2. Последовательность элементов: список • Хотим хранить произвольное количество однотипных элементов

    • Добавлять новые элементы в конец, начало, середину • Хотим получать элементы по их порядковому номеру
  3. Массив? • Произвольное количество элементов: ок • Обращение по порядковому

    номеру: ок • Добавление элементов в конец, начало, середину?
  4. class Elem { public: // пусть эти поля будут публичными

    // (так меньше возни) int val; Elem* next = NULL; Elem(int val); };
  5. class LinkedList { private: // важно установить NULL здесь или

    в явном конструкторе, // иначе будет ошибка сегментирования - по умолчанию указатель // в NULL не устанавливается Elem* first = NULL; public: ~LinkedList(); unsigned int size(); void add(Elem* elem); void add(int val); void insert(Elem* elem, unsigned int index); void insert(int val, unsigned int index); void remove(unsigned int index); int get(unsigned int index); void print(); };
  6. void LinkedList::add(Elem* elem) { if(this->first == NULL) { this->first =

    elem; } else { Elem* last = this->first; while(last->next != NULL) { last = last->next; } last->next = elem; } } void LinkedList::add(int val) { Elem* elem = new Elem(val); add(elem); }
  7. LinkedList::~LinkedList() { Elem* curr = this->first; Elem* next; while(curr !=

    NULL) { next = curr->next; delete curr; curr = next; } }
  8. Самостоятельно • Реализовать список на С++ • Без использования STL

    • Демо в консоли • Для демо НЕ нужно интерактивную обвязку в стиле «введите действие», «введите число» и т.п. • Изменения делаем в коде main • (будет в стиле модульных тестов)
  9. Структура отчета • Титульный лист • Введение • Решение по

    шагам • Результат работы (если консоль — текст, если GUI, то скриншоты) • Полный листинг (код, который писали сами)