Слайд 1СТРУКТУРЫ ДАННЫХ
Лектор
Спиричева Наталия Рахматулловна
Ст. преподаватель каф. ИТ
Ауд. Р-246
Слайд 2Структуры данных
Структуры данных
Составитель курса лекций:
Спиричева Наталия Рахматулловна,
ст. преподаватель каф.
Информационных технологий
Слайд 3Структуры данных
Структуры данных
Статические структуры данных
Слайд 4Структуры данных
Структуры данных и алгоритмы
Основные темы лекции:
Векторы
Массивы
Множества
Записи
Таблицы
Слайд 5Структуры данных
Статические структуры
данных
Cтатические структуры относятся к разряду непримитивных
структур, представляют собой структурированное множество примитивных, базовых структур.
Слайд 6Структуры данных
Статические структуры
данных
Cтатические структуры отличаются отсутствием изменчивости, память
для них выделяется автоматически на этапе компиляции или выполнения при
активизации программного блока, в котором они описаны.
Слайд 7Структуры данных
Статические структуры
данных
Статические структуры в языках программирования связаны
со структурированными типами.
К таким типам относятся:
векторы
массивы
записи
множества
Слайд 8Структуры данных
Статические структуры
данных
Векторы
Слайд 9Структуры данных
Векторы
ЛОГИЧЕСКАЯ СТРУКТУРА
Вектор (одномерный массив) - структура данных с
фиксированным числом элементов одного и того же типа. Каждый элемент
вектора имеет уникальный в рамках заданного вектора номер. Обращение к элементу вектора выполняется по имени вектора и номеру требуемого элемента.
Слайд 10Структуры данных
Векторы
МАШИННОЕ ПРЕДСТАВЛЕНИЕ. АДРЕСАЦИЯ ЭЛЕМЕНТОВ СТРУКТУР
Элементы вектора размещаются в памяти
в подряд расположенных ячейках памяти.
В языках программирования вектор представляется
одномерным массивом с синтаксисом описания вида:
С: <тип_элементов> <Имя_массива>[N];
где N – количество элементов в массиве.
Слайд 11Структуры данных
Для одномерного массива синтаксис создания будет
таким:
тип[] имя_массива = new тип[размер];
Например, зарезервировать память под 10 элементов
целого типа можно так:
int[] array = new int[10];
Слайд 12Структуры данных
Векторы
Представление вектора в памяти
Слайд 13Структуры данных
Векторы
Количество байт непрерывной области памяти, занятых одновременно вектором, определяется
по формуле:
ByteSise = ( N ) * Sizeof (тип)
Слайд 14Структуры данных
Векторы
Обращение к i-му элементу вектора выполняется по адресу вектора
плюс смещение к данному элементу. Смещение i-го элемента вектора определяется
по формуле:
ByteNumer = ( i ) * Sizeof (тип),
а адрес его:
@ ByteNumber = @ имя + ByteNumber.
где @ имя - адрес первого элемента вектора
Слайд 15Структуры данных
Векторы
адрес i-го элемента может быть вычислен как:
@Имя[i] =
@Имя + i*Sizeof(тип)
Слайд 16Структуры данных
Статические структуры данных
Массивы
Слайд 17Структуры данных
Массивы
Массив - структура данных, характеризующаяся:
фиксированным набором элементов одного и
того же типа;
каждый элемент имеет уникальный набор значений индексов;
количество индексов
определяет мерность массива, например, два индекса - двумерный массив, три индекса - трехмерный массив, один индекс - одномерный массив или вектор;
обращение к элементу массива выполняется по имени массива и значениям индексов для данного элемента
Слайд 18Структуры данных
Массивы
Массив - регулярная структура: все его компоненты – одного
типа, называемого базовым типом.
Массив – структура с так называемым случайным
(прямым) доступом, все его компоненты могут выбираться произвольно и являются одинаково доступными.
Слайд 19Структуры данных
Массивы
Другое определение:
Массив - это вектор, каждый элемент которого
- вектор.
Слайд 20Структуры данных
Массивы
Синтаксис описания массива представляется в виде:
[n1] [n2]
.. [nn];
Для случая двумерного массива:
[n1] [n2]
Слайд 21Структуры данных
Массивы
Физическая структура
Физическая структура - это размещение
элементов массива в памяти ЭВМ. Для случая двумерного массива, состоящего
из (n) строк и (k) столбцов
Слайд 22Структуры данных
Массивы
Количество байтов памяти, занятых двумерным массивом, определяется по формуле
:
ByteSize = (n)*(k)*SizeOf(Тип)
Слайд 23Структуры данных
Массивы
Смещение к элементу массива Mas[i1][i2] определяется по формуле:
ByteNumber =
[ i1* k + i2 ]*SizeOf(Тип)
его адрес:
ByteNumber =
@mas + ByteNumber = *(*(Mas + i1) + i2)
Слайд 24Структуры данных
Массивы
Операции:
доступ к заданному элементу
сортировка массива
поиск элемента по ключу
Слайд 25Структуры данных
Массивы
Массив, это последовательность однотипных элементов, упакованная под одним именем.
Эти данные легко отсортировать, перебрать и обрабатывать. Массив в C#
представляет собой объект ссылочного типа, который хранится на управляемой куче, а ссылка на него помещается в стек потока. Создание массива представляет собой двухступенчатый процесс: сначала объявляется ссылочная переменная на массив, а затем для него выделяется память и переменной присваивается ссылка на эту память.
Слайд 26Структуры данных
Массивы
Так для одномерного массива синтаксис создания будет таким
тип[] имя_массива
= new тип[размер];
Например, зарезервировать память под 10 элементов целого типа
можно так
int[] array = new int[10];
Слайд 27Структуры данных
Массивы
Одну и ту же ссылку на массив можно использовать
многократно при создании нескольких совместимых с ее типом массивов. В
таком случае адресация прежнего массива будет утеряна. Например
int[] array = new int[10];
............
array = new int[20];
Слайд 28Структуры данных
Массивы
Можно выполнять сразу и объявление и инициализацию массива, тогда
создание массива и подсчет его размерности выполнит компилятор по списку
инициализации. В этом случае ключевое слово new не нужно. Например
int[] array = { 1, 2, 3, 4, 5 };
Слайд 29Структуры данных
Массивы
Можно создать массив фиксированной размерности и сразу его инициализировать.
Тогда размер списка инициализации должен строго соответствовать заказанной размерности массива.
Например
int[] array = new int[5]{ 1, 2, 3, 4, 5 };
Допустим и такой синтаксис - без указания размерности, но с инициализацией
int[] array = new int[]{ 1, 2, 3, 4, 5 };
Слайд 30Структуры данных
Массивы
Можно вначале создать массив, а потом поэлементно присвоить ему
значения. И тоже нужно следить, чтобы не выйти за пределы
установленной размерности массива.
int[] array = new int[5];
for (int i = 0; i < array.Length; i++)
array[i] = i;
Слайд 31Структуры данных
Массивы
// Работа с двумерным массивом
const int ROWS = 5, COLUMNS = 4;// Границы
int[,] array = new int[ROWS, COLUMNS];// Создание
for (int count = 0; count < array.Length; count++)
array[count / COLUMNS, count % COLUMNS] = count;// Наполнение
for (int row = 0; row < ROWS; row++)// Перебор строк
{
for (int col = 0; col < COLUMNS; col++)// Перебор столбцов
{
string str = String.Format("a[{0},{1}]={2, -6}",
row, col, array[row, col]);
Console.Write(str);
}
Console.WriteLine();// Новая строка
}
Слайд 32Структуры данных
Массивы
class Program
{
static void Main()
{
new MyClass();// Чтобы сработал конструктор
// Для задержки консольного окна
Console.ReadLine();
}
}
Слайд 34Структуры данных
Массивы
Специальные массивы
Симметричные массивы
Разреженные массивы
Слайд 35Структуры данных
Массивы
СИММЕТРИЧНЫЕ МАССИВЫ
Двумерный массив, в котором количество строк равно количеству
столбцов, называется квадратной матрицей.
Квадратная матрица, у которой элементы, расположенные симметрично
относительно главной диагонали, попарно равны друг другу, называется симметричной.
Слайд 36Структуры данных
Массивы
На практике для работы с симметричной матрицей разрабатываются следующие
процедуры для:
а) преобразования индексов матрицы в индекс вектора,
б) формирования вектора
и записи в него элементов верхнего треугольника элементов исходной матрицы,
в) получения значения элемента матрицы из ее упакованного представления.
Слайд 37Структуры данных
Массивы
РАЗРЕЖЕННЫЕ МАССИВЫ
Разреженный массив - массив, большинство элементов которого равны
между собой, так что хранить в памяти достаточно лишь небольшое
число значений, отличных от основного (фонового) значения остальных элементов.
Слайд 38Структуры данных
Массивы
Различают два типа разреженных массивов:
1) массивы, в которых местоположения
элементов со значениями, отличными от фонового, могут быть математически описаны;
2)
массивы со случайным расположением элементов.
Слайд 39Структуры данных
Массивы
МАССИВЫ С МАТЕМАТИЧЕСКИМ ОПИСАНИЕМ МЕСТОПОЛОЖЕНИЯ НЕФОНОВЫХ ЭЛЕМЕНТОВ
Массивы, у
которых местоположения элементов со значениями могут быть математически описаны, т.е.
в их расположении есть какая-либо закономерность.
Слайд 40Структуры данных
Массивы
Функции для работы с разреженным массивом:
преобразование индексов массива в
индекс вектора;
получение значения элемента массива из ее упакованного представления по
двум индексам (строка, столбец);
запись значения элемента массива в ее упакованное представление по двум индексам.
Слайд 41Структуры данных
Массивы
РАЗРЕЖЕННЫЕ МАССИВЫ СО СЛУЧАЙНЫМ РАСПОЛОЖЕНИЕМ ЭЛЕМЕНТОВ
К данному типу массивов
относятся массивы, у которых местоположения элементов со значениями, отличными от
фонового, не могут быть математически описаны, т.е. в их расположении нет какой-либо закономерности.
Слайд 42Структуры данных
Массивы
РАЗРЕЖЕННЫЕ МАССИВЫ СО СЛУЧАЙНЫМ РАСПОЛОЖЕНИЕМ ЭЛЕМЕНТОВ
0 0 6
0 9 0 0 В матрице А
размерности 5*7
2 0 0 7 8 0 4 из 35 элементов только 10 отличны от нуля.
10 0 0 0 0 0 0
0 0 12 0 0 0 0
0 0 0 3 0 0 5
Слайд 43Структуры данных
Массивы
ПРЕДСТАВЛЕНИЕ РАЗРЕЖЕННЫХ МАТРИЦ МЕТОДОМ ПОСЛЕДОВАТЕЛЬНОГО РАЗМЕЩЕНИЯ
Основной способ хранения разреженных
матриц заключается в запоминании ненулевых элементов в одномерном массиве и
идентификации каждого элемента массива индексами строки и столбца
Слайд 44Структуры данных
Массивы
ПРЕДСТАВЛЕНИЕ РАЗРЕЖЕННЫХ МАТРИЦ МЕТОДОМ ПОСЛЕДОВАТЕЛЬНОГО РАЗМЕЩЕНИЯ
Слайд 45Структуры данных
Массивы
ПРЕДСТАВЛЕНИЕ РАЗРЕЖЕННЫХ МАТРИЦ МЕТОДОМ СВЯЗАННЫХ СТРУКТУР
Метод связанных структур
переводит представляемую структуру данных в другой раздел классификации. При этом
логическая структура данных остается статической, а физическая структура становится динамической.
Для представления разреженных матриц требуется базовая структура вершины, называемая MATRIX_ELEMENT ("элемент матрицы").
Слайд 46Структуры данных
Статические структуры данных
Множества
Слайд 47Структуры данных
Множества
ЛОГИЧЕСКАЯ СТРУКТУРА
Множество - такая структура, которая представляет собой набор
неповторяющихся данных одного и того же типа.
Слайд 48Структуры данных
Множества
ФИЗИЧЕСКАЯ СТРУКТУРА
Число байтов, выделяемых для данных типа множество:
ByteSize =
(max div 8)-(min div 8) + 1,
где max и min
- верхняя и нижняя границы базового типа данного множества.
Номер байта для конкретного элемента Е :
ByteNumber = (E div 8)-(min div 8),
номер бита внутри этого байта по формуле:
BitNumber = E mod 8
Слайд 49Структуры данных
Множества
Числовые множества
Стандартный числовой тип, который может быть базовым для
формирования множества - тип byte.
Слайд 50Структуры данных
Множества
Символьные множества
Символьные множества хранятся в памяти так же, как
и числовые множества. Разница лишь в том, что хранятся не
числа, а коды ASCII символов.
Слайд 51Структуры данных
Множества
Множество из элементов перечислимого типа
Множество, базовым типом которого есть
перечислимый тип, хранится так же, как множество, базовым типом которого
является тип byte. Однако в памяти занимает место, которое зависит от количества элементов в перечислимом типе.
Слайд 52Структуры данных
Множества
Множество от интервального типа
Множество, базовым типом которого есть интервальный
тип, хранится так же, как множество, базовым типом которого является
тип byte. Однако, в памяти занимает место, которое зависит от количества элементов, входящих в объявленный интервал.
Слайд 53Структуры данных
Множества
Операции над множествами
Пусть S1, S2, S3 : set
of byte.
Над этими множествами определены следующие специфические операции:
Объединение множеств
Пересечение
Проверка
на вхождение элемента в множество
Слайд 54Структуры данных
Множества
Операции над множествами
1). Объединение множеств: S2+S3.
Результатом является
множество, содержащее элементы обоих исходных множеств.
Слайд 55Структуры данных
Множества
Операции над множествами
2). Пересечение множеств: S2*S3.
Результатом является множество,
содержащее общие элементы обоих исходных множеств.
Слайд 56Структуры данных
Множества
Операции над множествами
3). Проверка на вхождение элемента
в
множество: a in S1.
Результатом этой операции является значение
логического типа - true, если элемент a входит в множество S1, false - в противном случае.
Слайд 57Структуры данных
Статические структуры данных
Записи
Слайд 58Структуры данных
Записи
Логическое и машинное представление записей
Запись - конечное упорядоченное множество
полей, характеризующихся различным типом данных.
Слайд 59Структуры данных
Записи
В памяти структура записи может быть представлена в одном
из двух видов :
а) в виде последовательности полей, занимающих непрерывную
область памяти.
б) в виде связного списка с указателями на значения полей записи.
Слайд 60Структуры данных
Записи
а) в виде последовательности полей, занимающих непрерывную область памяти.
При такой организации достаточно иметь один указатель на начало области
и смещение относительно начала. Это дает экономию памяти, но лишнюю трату времени на вычисление адресов полей записи.
Слайд 61Структуры данных
Записи
Полем записи может быть интегрированная структура данных:
Вектор
Массив
Запись
Полем записи может
быть другая запись, но ни в коем случае не такая
же.
Слайд 62Структуры данных
Записи
Операции над записями
Важнейшей операцией для записи является операция доступа
к выбранному полю записи - операция квалификации.
записи>.<имя поля>
Над выбранным полем записи возможны любые операции, допустимые для типа этого поля.
Слайд 63Структуры данных
Статические структуры
данных
Struct rec{
long num;
{ личный номер студента }
char name[21]; { Ф.И.О. }
char fac[8], group[8]; { факультет, группа }
unsigned short math,comp,lang;{оценки по математике, выч.тех-}
{нике, ин. языку}
}
Слайд 64Структуры данных
Структуры в C# практически ничем не отличаются от структур
в любом другом языке. Отличия наблюдаются лишь на более низком
уровне. В основном это касается того, что для структур в C# не существует базового класса. Но в то же время структуры являются производными от типа ValueType.
Слайд 65Структуры данных
struct STUDENT
{
public string
fio;
public string FormOfEducation;
public
int course;
public string faculty; }
Слайд 66Структуры данных
Статические структуры данных
Записи с вариантами
Слайд 67Структуры данных
Записи с вариантами
Запись с вариантами состоит из двух частей.
В первой части описываются поля, общие для всех групп объектов,
моделируемых записью.
Вторая часть записи содержит описания непересекающихся свойств - для каждого подмножества таких свойств - отдельное описание.
Слайд 68Структуры данных
Записи с вариантами
Под запись с вариантами выделяется в любом
случае объем памяти, достаточный для размещения самого большого варианта.
Слайд 69Структуры данных
Статические структуры данных
Таблицы
Слайд 70Структуры данных
Таблицы
Таблица - вектор, элементами которого являются записи.
Особенность таблиц
- доступ к элементам таблицы производится не по номеру (индексу),
а по ключу - по значению одного из свойств объекта.
Ключ - это свойство, идентифицирующее данную запись во множестве однотипных записей.
Основной операцией при работе с таблицами является операция доступа к записи по ключу.
Слайд 71Структуры данных
Таблицы
Таблицы:
с фиксированной длиной записи
с переменной длиной записи.
Слайд 72Структуры данных
1.Каковы особенности статических структур данных?
2. Перечислите основные статические структуры?
3.
Какие основные операции выполняются над статическими структурами?
Контрольные вопросы
Слайд 73Спасибо за внимание!
Структуры данных