Справочник от Автор24
Поделись лекцией за скидку на Автор24

Линейный список

  • 👀 440 просмотров
  • 📌 367 загрузок
Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Линейный список» pdf
Дисциплина «Алгоритмы и структуры данных» Лекция № 6 Линейный список Филатов Вячеслав Валерьевич к.т.н., доцент кафедры КБ-2 «Прикладные информационные технологии» Абстрактный тип данных «Список» Линейный список (с математической точки зрения) – это множество, состоящее из n > 0 узлов Х[1], Х[2], .... Х[n], структурные свойства которого по сути ограничиваются лишь линейным (в математическом смысле), т.е. одномерным относительным положением узлов, определяемыми условиями, что • если n > 0, то Х [1] является первым узлом; • если 1 < k < n, то k-му узлу Х [k] предшествует Х [k - 1] и за ним следует Х[k + 1]; • Х [n] является последним узлом. Абстрактный тип данных «Список» Линейный список (с математической точки зрения) – это множество, состоящее из n > 0 узлов Х[1], Х[2], .... Х[n], структурные свойства которого по сути ограничиваются лишь линейным (в математическом смысле), т.е. одномерным относительным положением узлов, определяемыми условиями, что • если n > 0, то Х [1] является первым узлом; • если 1 < k < n, то k-му узлу Х [k] предшествует Х [k - 1] и за ним следует Х[k + 1]; • Х [n] является последним узлом. Реализация АТД «Линейный список» Последовательность элементов (список) в памяти ЭВМ можно организовать двумя способами, используя либо последовательное, либо связанное распределение элементов. • При последовательном распределении элементы располагаются друг за другом вплотную (без пропусков), причем порядок физического следования (расположения) в памяти соответствует порядку обхода или порядковому номеру элемента в последовательности. • Если же реализовать механизм, обеспечивающий последовательный обход элементов в требуемом порядке, но расположенных физически в областях памяти произвольно, причем необязательно друг за другом, то тогда мы имеем связанное распределение. Такое название определено наличием связи между элементами, определяющей порядок следования. • По числу и особенностям связей между элементами различают однонаправленные и двунаправленные списки, а также кольцевые списки. • Заметим, что связанное распределение можно реализовать, используя как динамические структуры-списки, так и массивы. Реализация АТД «Линейный список» Последовательность элементов (список) в памяти ЭВМ можно организовать двумя способами, используя либо последовательное, либо связанное распределение элементов. • При последовательном распределении элементы располагаются друг за другом вплотную (без пропусков), причем порядок физического следования (расположения) в памяти соответствует порядку обхода или порядковому номеру элемента в последовательности. • Если же реализовать механизм, обеспечивающий последовательный обход элементов в требуемом порядке, но расположенных физически в областях памяти произвольно, причем необязательно друг за другом, то тогда мы имеем связанное распределение. Такое название определено наличием связи между элементами, определяющей порядок следования. • По числу и особенностям связей между элементами различают однонаправленные и двунаправленные списки, а также кольцевые списки. • Заметим, что связанное распределение можно реализовать, используя как динамические структуры-списки, так и массивы. Реализация АТД «Линейный список» Последовательность элементов (список) в памяти ЭВМ можно организовать двумя способами, используя либо последовательное, либо связанное распределение элементов. • При последовательном распределении элементы располагаются друг за другом вплотную (без пропусков), причем порядок физического следования (расположения) в памяти соответствует порядку обхода или порядковому номеру элемента в последовательности. • Если же реализовать механизм, обеспечивающий последовательный обход элементов в требуемом порядке, но расположенных физически в областях памяти произвольно, причем необязательно друг за другом, то тогда мы имеем связанное распределение. Такое название определено наличием связи между элементами, определяющей порядок следования. • По числу и особенностям связей между элементами различают однонаправленные и двунаправленные списки, а также кольцевые списки. • Заметим, что связанное распределение можно реализовать, используя как динамические структуры-списки, так и массивы. Реализация АТД «Линейный список» Последовательность элементов (список) в памяти ЭВМ можно организовать двумя способами, используя либо последовательное, либо связанное распределение элементов. • При последовательном распределении элементы располагаются друг за другом вплотную (без пропусков), причем порядок физического следования (расположения) в памяти соответствует порядку обхода или порядковому номеру элемента в последовательности. • Если же реализовать механизм, обеспечивающий последовательный обход элементов в требуемом порядке, но расположенных физически в областях памяти произвольно, причем необязательно друг за другом, то тогда мы имеем связанное распределение. Такое название определено наличием связи между элементами, определяющей порядок следования. • По числу и особенностям связей между элементами различают однонаправленные и двунаправленные списки, а также кольцевые списки. • Заметим, что связанное распределение можно реализовать, используя как динамические структуры-списки, так и массивы. Последовательное и связанное распределения Операция Последовательное распределение Связанное распределение Доступ к произвольному элементу (изменение) O(1) O(N) Добавление O(N) O(1) Удаление элемента из списка O(N) O(1) Объединение (разъединение) двух списков O(N+M) min{O(N), O(M)} O(1) ? Аналогично «малому» Использование «огромного» числа элемента Способы организации списков • — линейный список, в котором все включения и исключения (и обычно всякий доступ) делаются в одном конце списка. Организуется по принципу “Last In – First Out” (LIFO) • — линейный список, в котором все включения производятся на одном конце списка, а все исключения (и обычно всякий доступ) делаются на другом его конце. Организуется по принципу “First In – First Out” (FIFO) • — линейный список, в котором все включения и исключения (и обычно всякий доступ) реализован на обоих концах списка. Является обобщением понятий стека и очереди. Способы организации списков • Стек (stack)— линейный список, в котором все включения и исключения (и обычно всякий доступ) делаются в одном конце списка. Организуется по принципу “Last In – First Out” (LIFO) • Очередь (queue) — линейный список, в котором все включения производятся на одном конце списка, а все исключения (и обычно всякий доступ) делаются на другом его конце. Организуется по принципу “First In – First Out” (FIFO) • Дек (deque) – линейный список, в котором все включения и исключения (и обычно всякий доступ) реализован на обоих концах списка. Является обобщением понятий стека и очереди. Способы организации списков • Стек (stack)— линейный список, в котором все включения и исключения (и обычно всякий доступ) делаются в одном конце списка. Организуется по принципу “Last In – First Out” (LIFO) Аналогия с переключением железнодорожных путей, предложенная Э. Дейкстрой, помогает понять механизм стека. • стека и очереди. Способы организации списков • Стек (stack)— линейный список, в котором все включения и исключения (и обычно всякий доступ) делаются в одном конце списка. Организуется по принципу “Last In – First Out” (LIFO) Статическая реализация • стека и очереди. Стек запись i чтение i … 1 дно … i+1 вершина чтение вершина … … запись Динамическая реализация дно Указатель на вершину стека чтение запись … вершина … null дно Способы организации списков • Очередь (queue) — линейный список, в котором все включения производятся на одном конце списка, а все исключения (и обычно всякий доступ) делаются на другом его конце. Организуется по принципу “First In – First Out” (FIFO) Статическая реализация Очередь … 1 n выход вход извлечение чтение начало Динамическая реализация … конец добавление запись Указатель на начало очереди Указатель на конец очереди извлечение … null начало … null конец добавление Способы организации списков • Дек (deque) – линейный список, в котором все включения и исключения (и обычно всякий доступ) реализован на обоих концах списка. Является обобщением понятий стека и очереди. Способы организации списков • Дек (deque) – линейный список, в котором все включения и исключения (и обычно всякий доступ) реализован на обоих концах списка. Дек Является обобщением понятий стека и очереди. извлечение добавление начало … конец извлечение добавление Динамическая реализация Указатель на начало дека Указатель на конец дека извлечение … nil добавление начало … nil извлечение конец добавление Способы организации списков • Стек (stack)— линейный список, в котором все включения и исключения (и обычно всякий доступ) делаются в одном конце списка. Организуется по принципу “Last In – First Out” (LIFO) • Очередь (queue) — линейный список, в котором все включения производятся на одном конце списка, а все исключения (и обычно всякий доступ) делаются на другом его конце. Организуется по принципу “First In – First Out” (FIFO) • Дек (queue) – линейный список, в котором все включения и исключения (и обычно всякий доступ) реализован на обоих концах списка. Является обобщением понятий стека и очереди. АТД «Линейный список» МЕТОДЫ АТД «Линейный список» • получить значение первого элемента (на выходе) например: x=value(), x= top() • добавить элемент (на вход) например: add(x), push(x) • удалить («выпихнуть») элемент из списка (на выходе) например: del(), pop() • проверить – список пуст например: isEmpty() • обнулить (проинициализировать) список например: конструктор_класса(), init() «Структурность» Структуры по способу организации данных (в контексте времени поиска элемента) делятся на … Линейные Нелинейные ? «Структурность» Структуры по способу организации данных (в контексте времени поиска элемента) делятся на … Линейные Время поиска порядка O(N) Нелинейные ? «Структурность» Структуры по способу организации данных (в контексте времени поиска элемента) делятся на … Линейные Пример? Нелинейные ? «Структурность» Структуры по способу организации данных (в контексте времени поиска элемента) делятся на … Под термином библиотека стандартных шаблонов (STL, Standard Template Library) понимают набор интерфейсов и компонентов, первоначально разработанных Александром Степановым, Менг Ли и другими сотрудниками AT&T Bell Laboratories и Hewlett-Packard Research Laboratories в начале 90-х годов (хотя и позже ещё весьма многие приложили руку к тому, что стало на сегодня стандартным компонентом C++). Линейные На примере STL: - vector - list - stack - queue - deque - set, multiset Нелинейные ? Далее библиотека STL перешла в собственность компании SGI, а также была включена как компонент в набор библиотек Boost. И наконец библиотека STL вошла в стандарты C++ 1998 и 2003 годов (ISO/IEC 14882:1998 и ISO/IEC 14882:2003) и с тех пор считается одной из составных частей стандартной библиотек C++ «Структурность» Структуры по способу организации данных (в контексте времени поиска элемента) делятся на … Линейные последовательные контейнеры Нелинейные «Структурность» Структуры по способу организации данных (в контексте времени поиска элемента) делятся на … Линейные Нелинейные последовательные контейнеры Время поиска менее O(N) Пример? «Структурность» Структуры по способу организации данных (в контексте времени поиска элемента) делятся на … Линейные последовательные контейнеры Нелинейные • Списки со многими связями (лес, мультисписки, «слоёные» списки и т.п.) • Деревья – O(N) «Структурность» Структуры по способу организации данных (в контексте времени поиска элемента) делятся на … Линейные последовательные контейнеры Нелинейные Ассоциативные На примере STL: - map - multimap «Структурность» Структуры по способу организации данных (в контексте времени поиска элемента) делятся на … Линейные последовательные контейнеры Нелинейные Ассоциативные «Структурность» Структуры по способу организации данных (в контексте времени поиска элемента) делятся на … Линейные последовательные контейнеры Нелинейные Ассоциативные «Структурность» Структуры по способу организации данных (в контексте времени поиска элемента – с целью доступа) делятся на … Линейные Нелинейные Ассоциативные последовательные контейнеры ассоциативные контейнеры Хеш-таблицы O(N) O(log(N)) O(const) Спасибо за внимание!
«Линейный список» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Найди решение своей задачи среди 1 000 000 ответов
Найти

Тебе могут подойти лекции

Смотреть все 588 лекций
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot