Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие студентам.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
4.13 Mб
Скачать

Тема 4.2. Структуры данных

4.2.1.Структуры данных

В памяти ЭВМ хранятся программы и данные. Программы представляют собой набор инструкций, или кодов, реализация которых означает преобразование некоторых данных.

Данные — это всё отличное от программного кода, точнее это часть программы, совокупность значений определенных ячеек памяти, преобразование которых осуществляется в соответствии инструкциями программы.

Доступ к данным в современных компьютерах осуществляется под контролем аппаратных средств.

В соответствии с принципом фон Неймана, одна и та же область памяти может использоваться как для хранения данных, так и для хранения исполнимого кода.

В вычислительной технике различают два типа данных: двоичные (бинарные) и текстовые.

Двоичные данные представляют собой комбинации нулей и единиц, которые обрабатываются специальным программным обеспечением.

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

Структура данных — это программная единица, позволяющая хранить и обрабатывать множество однотипных и/или логически связанных данных.

Для добавления, поиска, изменения и удаления данных структура данных предоставляет некоторый набор функций, составляющих интерфейс структуры данных.

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

Хорошо спроектированное место хранения данных оптимизирует использование ресурсов, требуемых для выполнения наиболее критичных операций. К этим ресурсам относятся: время выполнения операций, используемый объём оперативной памяти, число обращений к дисковым накопителям.

Структуры данных формируются с помощью типов данных, ссылок и операций над ними в выбранном языке программирования.

Определение каждой структуры данных включает в себя:

      • список действий, которые можно выполнять над этой структурой;

      • формально логическое определение как объекта, которое задает разбиение объекта на более элементарные объекты и определенные над ними операции;

      • описание физического представления структуры, которое определяет расположение данных в памяти компьютера, а также способы кодирования операций в конкретном языке программирования.

4.2.2 Линейные и нелинейные структуры

При разработке программного обеспечения сложность реализации и качество работы программ существенно зависит от правильного выбора структур данных.

Различают линейные и нелинейные структуры.

К линейным структурам относятся:

      • массив;

      • таблица,

      • стек.

Массив упорядоченная структура однотипных данных. Упорядоченность определяется тем, что отдельные элементы массива обозначаются упорядоченной совокупностью натуральных чисел n, называемых индексами. Число n называется размерностью массива.

Одномерный массив (линейная таблица) массив, элементами которого являются атомарные переменные, например, одномерный массив вещественных чисел (рис.4.2.1). Элементы массива записаны в ячейках таблицы. Над ячейками проставлены индексы.

0

1

2

3

4

5

6

7

8

9

9

3

5

8

2

3

6

5

7

2

Рис. 4.2.1. Одномерный массив

Список допустимых действий над массивом:

    • создать массив;

    • присвоить значение элементу массива;

    • запросить значение элемента массива.

Массив, элементами которого являются одномерные массивы, называется двумерным массивом. В данном случае размерностью массива будет количество строк например, n, количество столбцов количество элементов в строке например, m.

1

2

3

4

5

1

4

6

8

0

2

2

8

3

5

1

0

3

2

5

9

2

8

Рис. 4.2.2. Двумерный массив

Изображенный на рис. 4.2.2 двумерный массив имеет n=3 строк и m=5 столбцов.

К элементам массива можно обращаться в произвольном порядке, используя значения индексов. Действия над элементами массива определяются типом этих элементов.

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

В программировании применяется сравнительно большое количество таблиц различного назначения. Особой разновидностью таблиц являются так называемые хеш таблицы.

Хеш таблица — это структура данных, обеспечивающая хранение пар (ключ, значение), что позволяет выполнять операции:

      • добавления новой пары;

      • поиска;

      • удаления пары по ключу.

Простейшим примером хеш функций может служить контрольная сумма.

Контрольная сумма — некоторое значение, рассчитанное из последовательности данных путём применения определённого алгоритма преобразования.

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

Хеш –таблицы используются для ускорения поиска данных в сложных структурах.

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

Стек (англ. stack — стопка) — структура данных с методом доступа к элементам LIFO (англ. Last In — First Out, «последним пришел — первым вышел»).

Начало последовательности называется дном стека, конец последовательности, в который производится добавление элементов и их исключение вершиной стека.

Переменная, которая указывает на последний элемент последовательности в вершине стека указатель стека.

Стеки широко используются в вычислительной технике, например, для отслеживания точек возврата из подпрограмм. Стек создается в оперативной памяти и служит для хранения адресов возврата из подпрограммы.

Добавление элемента, называемое также проталкиванием, возможно только в вершину стека, при этом добавленный элемент становится первым сверху.

Выталкивание элемента возможно только из вершины стека, при этом второй сверху элемент становится верхним.

В некоторых случаях стек еще называют магазином по аналогии с магазином в огнестрельном оружии – патроны последовательно проталкиваются в магазин при заряжании, а стрельба начинается с патрона, заряженного последним.

Вход Выход

Рис. 4.2.3. Стек

О́чередь — структура данных с порядком доступа к элементам FIFO ( First In — First Out) «первый пришёл — первый вышел»).

Добавление элемента возможно лишь в конец очереди, выборка — только из начала очереди.

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

Рис. 4.2.4. Очередь.

К нелинейным структурам относятся:

      • связные списки;

      • графы;

      • деревья.

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

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

Информация в списках представлена множество узлов (элементов). Каждый узел состоит из одной или нескольких последовательных ячеек оперативной памяти, разделенных на именуемые части, называемые полями. Адрес узла является адресом первого слова в узле. Адрес узла называют связью, указателем, стрелкой, ссылкой на этот узел.

Поле адреса

Поле значения

Рис. 4.2.5. Связный список

Графы.

История графов началась в г. Кенигсберг (ныне Калининград). Город располагался на обоих берегах реки Преголь и на двух островах, которые соединялись семью мостами. Знаменитому математику Леонарду Эйлеру предложили решить задачу: можно ли обойти эти мосты, проходя через каждый из них только один раз?

План города можно представить схемой (рис.4.2.6 ).На этой схеме части города, разделенные рукавами реки, сжаты в точки A,B,C,D вершины, а мосты представлены линиями a,b,c,d,e,f,g ребра.

Рис.4.2.6. Схема города

Фигура, состоящая из точек вершин и соединяющих их линий – ребер, называется графом.

B

A

Рис.4.2.7. Граф

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

В этом случае вершины A и B называются связанными.

Граф называется связным, если любая пара его вершин связна.

Граф, изображенный на рис. 4.2.8. – несвязен.

Рис.4.2.8. Несвязный граф

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

Ц епь, начальная и конечная вершины которой совпадают, называется циклом (рис.4.2.9 ).

Рис.4.2.9. Цикл.

Вершина называется четной, если в ней сходится четное число ребер. Вершина называется нечетной, если в ней сходится нечетное число ребер.

Число ребер, сходящихся в вершине графа, называется степенью, или порядком этой вершины.

Если множество ребер графа конечно, то такой граф называется конечным.

Леонард Эйлер, изучая проблему кенигсбергских мостов, решил общую задачу, которая описывается следующей теоремой.

Теорема Эйлера. В любом конечном связном графе, все вершины которого четны, существует цикл, в котором каждое ребро графа участвует ровно один раз.

Такой цикл называется эйлеровым циклом, а граф, все вершины которого четны эйлеровым графом.

В задаче о кенигсбергских мостах граф не является эйлеровым, так как все его вершины нечетны.

Эйлеровы циклы обдают тем свойством, что они проходят через каждое ребро графа ровно один раз.

Цикл, который проходит через каждую вершину графа один раз, называется гамильтоновым.

Важный класс графов составляют так называемые деревья. Дерево – это связный граф, который не имеет циклов.

Число вершин дерева на единицу больше числа его ребер.

Вопросы для самоконтроля

  1. Понятие о данных.

  2. Типы данных.

  3. Что такое структура данных?

  4. Содержание определения структуры данных?

  5. Какие структуры относятся к линейным?

  6. Что такое массив?

  7. Что такое таблица?

  8. Что такое стек?

  9. Что называется размерностью массива?

  10. Какие действия допустимы над массивом?

  11. Что такое хеш таблица и для чего она применяется?

  12. Назначение очереди в программировании?

  13. Какие структуры данных относятся к нелинейным структурам:?

  1. Что такое связные списки?

  2. Что такое граф?

  3. Какой маршрут называется цепью?

Тесты

1.Совокупность значений определенных ячеек памяти, преобразование которых осуществляется в соответствии инструкциями программы, это

данные

команды

файлы

пакеты

2. К линейным структурам данных относятся:

массив

таблица

стек

запись

  1. Фигура, состоящая из точек вершин и соединяющих их линий – ребер, это

блок схема

граф

очередь

дерево

  1. Вершина графа может быть

четной

нечетной

острой

пологой

5 Упорядоченная структура однотипных данных

массив

запись

файл

очередь

6. Маршрут, в котором каждое ребро графа встречается в нем не более одного раза

цепь

петля

цикл

путь

7. Граф, все вершины которого четные, называется

эйлеровым

гамильтоновым

паскалевым

правильным

  1. Структура данных с методом доступа к элементам LIFO «последним пришел — первым вышел»)

очередь

стек

цепь

хеш

9. Структура данных с порядком доступа к элементам FIFO «первый пришёл — первый вышел»).

стек

очередь

цепь

цикл

10.Связный граф, не имеющий циклов, это

дерево

сеть

очередь

поток