Скачать презентацию Алгоритмы и структуры данных Линейные структуры данных Скачать презентацию Алгоритмы и структуры данных Линейные структуры данных

03 - Линейные структуры данных.ppt

  • Количество слайдов: 44

Алгоритмы и структуры данных. Линейные структуры данных Алгоритмы и структуры данных. Линейные структуры данных

1. Типы данных Тип данных определяет: • Формат представления в памяти компьютера • Множество 1. Типы данных Тип данных определяет: • Формат представления в памяти компьютера • Множество допустимых значений, которые может принимать принадлежащая к выбранному типу переменная или константа • Множество допустимых операций, применимых к этому типу.

1. Типы данных Существует несколько основных типов данных: • • • Встроенные типы данных, 1. Типы данных Существует несколько основных типов данных: • • • Встроенные типы данных, т. е. типы, предопределенные в языке программирования. . “Уточняемый тип данных" - существует возможность определения типа на основе встроенного типа данных, значения которого упорядочены. Перечисляемые типы данных - явно определяемые целые типы с конечным числом именованных значений. Конструируемые типы (иногда их называют составными). Указательные типы - дают возможность работы с типизированными множествами абстрактных адресов переменных, содержащих значения некоторого типа.

1. Типы данных Встроенные типы данных – Целочисленные типы – Логический тип – Символьный 1. Типы данных Встроенные типы данных – Целочисленные типы – Логический тип – Символьный тип – Перечисляемый тип – Интервальный тип – Вещественный тип

1. Типы данных Конструируемые типы – Массив – Множество – Запись 1. Типы данных Конструируемые типы – Массив – Множество – Запись

Конструируемые типы - массив Массив - это фиксированное количество элементов данных, которые хранятся последовательно Конструируемые типы - массив Массив - это фиксированное количество элементов данных, которые хранятся последовательно и доступны по индексу Пример: Type Arr 1 = array[1. . 100] of Real; Arr 2 = array[boolean, 1. . 10, Size] of Real; Arr 3 = array[1. . 10, 1. . 8] of Boolean;

Конструируемые типы - запись • Запись - это тип данных, позволяющий хранить вместе переменные, Конструируемые типы - запись • Запись - это тип данных, позволяющий хранить вместе переменные, имеющие различные типы данных. • определения на языке Си: struct complex { float re; float im; }

Конструируемые типы - запись • определения на языке Си: struct complex { float re; Конструируемые типы - запись • определения на языке Си: struct complex { float re; float im; }

Конструируемые типы - множества • Множество - это набор элементов базового типа. • Переменная Конструируемые типы - множества • Множество - это набор элементов базового типа. • Переменная множественного типа может принимать как все значения множества, так и ни одного. Любой множественный тип может принимать значение [], которое называется пустым множеством.

Конструируемые типы - множества • Пример: type Digits = set of 0. . 9; Конструируемые типы - множества • Пример: type Digits = set of 0. . 9; Letters = set of 'A'. . 'Z';

Конструируемые типы - множества • Операции над множествами Опера ция Действие Результат + Объедине Конструируемые типы - множества • Операции над множествами Опера ция Действие Результат + Объедине Порядковое значение c содержится в a+b только тогда, когда ние оно содержится в a или в b. - Разность * Порядковое значение c содержится в a-b только тогда, когда оно содержится в a и не содержится в b. Пересечен Порядковое значение c содержится в a*b только тогда, когда ие он содержится в обоих множествах a и b.

Указательные типы Понятие указателя является абстракцией понятия машинного адреса. Подобно тому, как зная машинный Указательные типы Понятие указателя является абстракцией понятия машинного адреса. Подобно тому, как зная машинный адрес можно обратиться к нужному элементу памяти, имея значение указателя, можно обратиться к соответствующей переменной.

Указательные типы При решении ряда задач иногда просто невозможно обойтись использованием памяти, выделяемой компилятором Указательные типы При решении ряда задач иногда просто невозможно обойтись использованием памяти, выделяемой компилятором и системой поддержки времени выполнения в соответствии с явными описаниями переменных в программе. Почти во всех языках имеется возможность явно запрашивать и использовать области так называемой динамической памяти. Такие области принято называть "динамическими переменными". Динамическая переменная не имеет статически заданного имени, и доступ к такой переменной возможен только через указатель.

Указательные типы Используя структурные типы, указатели и динамические переменные, можно создавать разнообразные динамические структуры Указательные типы Используя структурные типы, указатели и динамические переменные, можно создавать разнообразные динамические структуры памяти - списки, деревья, графы и т. д.

2. Основные структуры данных. Структура данных (data structure) — это способ хранения и организации 2. Основные структуры данных. Структура данных (data structure) — это способ хранения и организации данных, облегчающий доступ к этим данным и их модификацию. Ни одна структура данных не является универсальной и не может подходить для всех целей, поэтому важно знать преимущества и ограничения, присущие некоторым из них.

2. 1 Массивы. . . Массив • • • Легок в использовании Прямой доступ 2. 1 Массивы. . . Массив • • • Легок в использовании Прямой доступ Быстрый поиск Локальность Медленные вставки/удаления Не тратит дополнительной памяти

2. 1 Массивы. . . • Массив: 2 способа организации: – статический: • обычно 2. 1 Массивы. . . • Массив: 2 способа организации: – статический: • обычно быстро работает • обычно локально располагается в памяти • проблема – неиспользуемое пространство и ограничение по размеру на этапе компиляции – динамический: • обычно дольше работает • не всегда локально располагается в памяти • есть возможность выделения памяти по мере необходимости

2. 2 Списки. . . Список • • • Сложнее в использовании Доступ последовательный 2. 2 Списки. . . Список • • • Сложнее в использовании Доступ последовательный Медленный переборный поиск Быстрые вставки и удаления Тратит дополнительную память

2. 2 Списки. . . • Классификация 1: – линейные – иерархические (деревья) – 2. 2 Списки. . . • Классификация 1: – линейные – иерархические (деревья) – сетевые (сети) Подвид: циклический. • Классификация 2: – односвязный – двухсвязный – многосвязный Подвид: с головой. • Классификация 3 (по способу реализации): – на массивах – на указателях (будем рассматривать этот вариант)

2. 2 Списки Классификация 1… Наиболее употребительны: • Линейные • Иерархические 2. 2 Списки Классификация 1… Наиболее употребительны: • Линейные • Иерархические

2. 2 Списки Классификация 2 • Связность – количество отношений следования. • Смысл: – 2. 2 Списки Классификация 2 • Связность – количество отношений следования. • Смысл: – ссылки вперед/назад – для удобства навигации. – разный порядок по разным признакам! • Чем больше связность: – тем больше тратится памяти; – тем медленнее операции; – тем лучше навигация и шире функциональность.

2. 2 Списки Разновидности • Циклический: чтобы не обрабатывать отдельно конец списка. • С 2. 2 Списки Разновидности • Циклический: чтобы не обрабатывать отдельно конец списка. • С головой: заводится 1 -е фиктивное звено для представления списком пустых структур (пустая структура, равная «нулю» ) – тоже структура. • Часто циклический список с головой.

2. 3 Массивы и списки • Массивы и списки – структуры хранения • Основные 2. 3 Массивы и списки • Массивы и списки – структуры хранения • Основные операции со структурами хранения: – Поиск – Вставка – Удаление Операция Поиск Вставка Удаление Массив неупорядоченный Массив упорядоченный Список N/2 1 N/2+N/2 log. N + N/2 1 N/2

2. 4 Матрицы Введение • Храним двумерным массивом (хранится по строкам в C, по 2. 4 Матрицы Введение • Храним двумерным массивом (хранится по строкам в C, по столбцам в Pascal и Fortran). • Особый случай – матрицы специального вида. • Зная вид матрицы, можно сэкономить память!

3. Абстрактные структуры данных • • • Стек Очередь Дек Ассоциативный массив Хеш-таблица 3. Абстрактные структуры данных • • • Стек Очередь Дек Ассоциативный массив Хеш-таблица

3. 1 Стек • Стек (Stack) - такой последовательный список с переменной длиной, включение 3. 1 Стек • Стек (Stack) - такой последовательный список с переменной длиной, включение и исключение элементов из которого выполняются только с одной стороны списка, называемого вершиной стека. • LIFO (Last - In - First- Out - "последним пришел - первым исключается")

3. 1 Стек • Примеры стека в жизни… 3. 1 Стек • Примеры стека в жизни…

3. 1 Стек Основные операции: • Push • Pop 3. 1 Стек Основные операции: • Push • Pop

3. 2 Очередь • Очередь (Queue) - последовательный список с переменной длиной, в котором 3. 2 Очередь • Очередь (Queue) - последовательный список с переменной длиной, в котором включение элементов выполняется только с одной стороны списка (эту сторону часто называют концом или хвостом очереди), а исключение - с другой стороны (называемой началом или головой очереди) • FIFO (First - In - First- Out - "первым пришел - первым исключается")

3. 2 Очередь 3. 2 Очередь

3. 3 Дек • Дек (Deque) - это такой последовательный список, в котором как 3. 3 Дек • Дек (Deque) - это такой последовательный список, в котором как включение, так и исключение элементов может осуществляться с любого из двух концов списка. Частный случай дека - дек с ограниченным входом и дек с ограниченным выходом.

3. 3 Дек Типовые операции: • Push. Back — добавление в конец очереди. • 3. 3 Дек Типовые операции: • Push. Back — добавление в конец очереди. • Push. Front — добавление в начало очереди. • Pop. Back — выборка с конца очереди. • Pop. Front — выборка с начала очереди. • Проверка наличия элементов. • Очистка.

3. 3 Дек 3. 3 Дек

3. 4 Ассоциативный массив • Ассоциативный массив (словарь) — абстрактный тип данных (интерфейс к 3. 4 Ассоциативный массив • Ассоциативный массив (словарь) — абстрактный тип данных (интерфейс к хранилищу данных), позволяющий хранить пары вида «(ключ, значение)» и поддерживающий операции добавления пары, а также поиска и удаления пары по ключу: • INSERT(ключ, значение) • FIND(ключ) • REMOVE(ключ)

3. 4 Ассоциативный массив 3. 4 Ассоциативный массив

3. 5 Хеш-таблицы 3. 5 Хеш-таблицы

4. Польская запись Обычные арифметические выражения называют инфиксными выражениями. Порядок выполнения действий в таких 4. Польская запись Обычные арифметические выражения называют инфиксными выражениями. Порядок выполнения действий в таких выражениях определяется старшинством опреаций и скобками. Вычисление и компиляция таких выражений подразумевает их предварительный анализ с целью выявления порядка выполнения операций. Существуют формы записи арифметических выражений без скобок, в которых порядок действий задается порядком знаков операций в выражении. Такие формы записи называются польской или бесскобочной записью. Вычисление и компиляция бесскобочных выражений оказывается проще, чем выражений со скобками, поскольку операции должны выполняться в порядке описания и предварительный анализ не требуется.

4. 1 Определение Префиксную польскую запись (Пр. ПЗ) определим так: 1) Если инфиксное выражение 4. 1 Определение Префиксную польскую запись (Пр. ПЗ) определим так: 1) Если инфиксное выражение Е представляет собой один операнд а, то Пр. ПЗ выражение Е - это просто а. 2) Если инфиксное выражение Е 1*Е 2, где * - знак операции, а Е 1 и Е 2 инфиксные выражения для операндов, то Пр. ПЗ этого выражения - это *Е 1'E 2', где E 1', E 2' - Пр. ПЗ выражений Е 1 и Е 2. 3) Если (Е) есть инфиксное выражение, то Пр. ПЗ этого выражения есть Пр. ПЗ Е.

4. 1 Определение Постфиксную польскую запись (Пр. ПЗ) определим так: 1) Если инфиксное выражение 4. 1 Определение Постфиксную польскую запись (Пр. ПЗ) определим так: 1) Если инфиксное выражение Е представляет собой один операнд а, то Пр. ПЗ выражение Е - это просто а. 2) Если инфиксное выражение Е 1*Е 2, где * - знак операции, E 1, E 2 - инфиксные выражения для операндов, то По. ПЗ этого выражения это - Е 1'E 2'*, где Е 1', E 2' - постфиксные выражения Е 1, Е 2. 3) Если (Е) есть инфиксное выражение, то Пр. ПЗ этого выражения есть Пр. ПЗ Е.

4. 1 Определение (a + b) * (c - d) E 1 = (a 4. 1 Определение (a + b) * (c - d) E 1 = (a + b) и E 2 = (c - d). Согласно определению префиксная запись выражения Е 1*Е 2 - это *E 1'E 2', где Е 1', Е 2' -префиксные записи выражений Е 1 и Е 2. Выполняя построение постфиксных записей для этих выражений, E 1' = +ab, E 2' = -cd, окончательно получаем результат в виде : *+ab-cd – префиксная форма ab+cd-* - постфиксная форма

4. 2 Вычисление префиксных польских записей 1. Просматриваем выражение слева направо, пока не найдем 4. 2 Вычисление префиксных польских записей 1. Просматриваем выражение слева направо, пока не найдем знак операции, за которым следуют два операнда. 2. Выполняем операцию и результат записываем на место выбранной тройки. 3. Повторяем пункт (1), пока не получим вместо выражения один результат. 1. 2. 3. 4. Вычисление построчного префиксного выражения можно представить в следующем виде: *+ab-cd *R 1 R 2 R 3

4. 2 Вычисление постфиксных записей 1. Просматриваем выражение слева направо пока не найдем два 4. 2 Вычисление постфиксных записей 1. Просматриваем выражение слева направо пока не найдем два стоящих рядом операнда, за которыми следует знак операции. 2. Выполняем операцию и записываем результат вместо выбранных операндов и операций. 3. Повторяем пункт (1) пока не получим вместо выражения единственный результат. Вычисление построенного постфиксного выражения можно представить в следующем виде: 1. ab+cd-* 2. R 1 cd-* 3. R 1 R 2* 4. R 3

4. 2 Вычисление постфиксных записей На практике вычисление постфиксных выражений реализуется с применением магазина. 4. 2 Вычисление постфиксных записей На практике вычисление постфиксных выражений реализуется с применением магазина. В этом случае вычисления выполняются по следующим правилам. 1. Прочитать очередной символ входной цепочки. 2. Если входной символ - операнд, то выполнить его запись в магазин. 3. Если входной символ - оператор, то прочитать два операнда из магазина, выполнить операцию и результат занести в магазин как операнд. 4. Повторять п. 1, пока во входной цепочке не будут прочитаны все символы.

4. 2 Вычисление постфиксных записей 4. 2 Вычисление постфиксных записей