HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <ul><li><a>Классификация</a></li>
1 <ul><li><a>Классификация</a></li>
2 <li><a>Простые структуры данных</a></li>
2 <li><a>Простые структуры данных</a></li>
3 <li><a>Статические структуры</a><ul><li><a>Вектор</a></li>
3 <li><a>Статические структуры</a><ul><li><a>Вектор</a></li>
4 <li><a>Двумерный массив</a></li>
4 <li><a>Двумерный массив</a></li>
5 <li><a>Множество</a></li>
5 <li><a>Множество</a></li>
6 <li><a>Записи</a></li>
6 <li><a>Записи</a></li>
7 </ul></li>
7 </ul></li>
8 <li><a>Полустатические структуры</a></li>
8 <li><a>Полустатические структуры</a></li>
9 <li><a>Динамические структуры</a><ul><li><a>Связные линейные списки</a></li>
9 <li><a>Динамические структуры</a><ul><li><a>Связные линейные списки</a></li>
10 </ul></li>
10 </ul></li>
11 <li><a>Заключение</a></li>
11 <li><a>Заключение</a></li>
12 </ul><p>На этапе создания спецификаций и требований, необходимых для разработки качественного ПО, важно определить<strong>структуру и формат данных</strong>, используемых в программном приложении. Каким же образом классифицируются структуры данных? Какие форматы представления данных используются? Чем различаются статические, динамические и полустатические структуры? Об этом - наша статья.</p>
12 </ul><p>На этапе создания спецификаций и требований, необходимых для разработки качественного ПО, важно определить<strong>структуру и формат данных</strong>, используемых в программном приложении. Каким же образом классифицируются структуры данных? Какие форматы представления данных используются? Чем различаются статические, динамические и полустатические структуры? Об этом - наша статья.</p>
13 <p>Вне зависимости от сложности и содержания любые данные представлены в памяти электронно-вычислительных устройств (ЭВМ) в виде последовательности битов (двоичных разрядов), причем их значения - это соответствующие двоичные числа. Однако сами по себе битовые последовательности структурированы недостаточно, поэтому они не очень удобны для практического использования. Именно поэтому на практике применяют<strong>структуры данных</strong>, которые организованы более сложно. Понятие структуры тесно связано с понятием типа данных.</p>
13 <p>Вне зависимости от сложности и содержания любые данные представлены в памяти электронно-вычислительных устройств (ЭВМ) в виде последовательности битов (двоичных разрядов), причем их значения - это соответствующие двоичные числа. Однако сами по себе битовые последовательности структурированы недостаточно, поэтому они не очень удобны для практического использования. Именно поэтому на практике применяют<strong>структуры данных</strong>, которые организованы более сложно. Понятие структуры тесно связано с понятием типа данных.</p>
14 <h2><strong>Классификация</strong></h2>
14 <h2><strong>Классификация</strong></h2>
15 <p>Структуры данных бывают<strong>физические и логические</strong>. В отличие от последних, физические отражают, по сути, способ представления данных в памяти ЭВМ, поэтому их называют еще и<strong>внутренними</strong>.</p>
15 <p>Структуры данных бывают<strong>физические и логические</strong>. В отличие от последних, физические отражают, по сути, способ представления данных в памяти ЭВМ, поэтому их называют еще и<strong>внутренними</strong>.</p>
16 <p><strong>По своему составу</strong>структуры данных классифицируют на следующие типы:</p>
16 <p><strong>По своему составу</strong>структуры данных классифицируют на следующие типы:</p>
17 <p>-<strong>простые</strong>. Их нельзя разделить на составные части, которые больше, чем биты, то есть мы говорим о неделимых единицах. Для простого типа ясно определен размер и способ размещения структуры в памяти ПК;</p>
17 <p>-<strong>простые</strong>. Их нельзя разделить на составные части, которые больше, чем биты, то есть мы говорим о неделимых единицах. Для простого типа ясно определен размер и способ размещения структуры в памяти ПК;</p>
18 <p>-<strong>сложные</strong>, они же интегрированные. Состоят из других структур данных, которые бывают как простые, так и, в свою очередь, тоже сложные. </p>
18 <p>-<strong>сложные</strong>, они же интегрированные. Состоят из других структур данных, которые бывают как простые, так и, в свою очередь, тоже сложные. </p>
19 <p><strong>По наличию связей</strong>структуры бывают:</p>
19 <p><strong>По наличию связей</strong>структуры бывают:</p>
20 <p>-<strong>несвязные</strong>: массивы, векторы, строки, стеки (Last In, First Out), очереди (First In, First Out);</p>
20 <p>-<strong>несвязные</strong>: массивы, векторы, строки, стеки (Last In, First Out), очереди (First In, First Out);</p>
21 <p>-<strong>связные</strong>(к примеру, связные списки).</p>
21 <p>-<strong>связные</strong>(к примеру, связные списки).</p>
22 <p>Также существует понятие<strong>изменчивости</strong>- это изменение количества элементов либо связей между ними.<strong>По признаку изменчивости</strong>структуры бывают:</p>
22 <p>Также существует понятие<strong>изменчивости</strong>- это изменение количества элементов либо связей между ними.<strong>По признаку изменчивости</strong>структуры бывают:</p>
23 <p>- <strong>статические</strong>;</p>
23 <p>- <strong>статические</strong>;</p>
24 <p>-<strong>полустатические</strong>;</p>
24 <p>-<strong>полустатические</strong>;</p>
25 <p>-<strong>динамические</strong>.</p>
25 <p>-<strong>динамические</strong>.</p>
26 <p>Классификацию можно посмотреть на картинке ниже:</p>
26 <p>Классификацию можно посмотреть на картинке ниже:</p>
27 <p>Здесь отдельного упоминания заслуживают<strong>файлы</strong>как структуры данных. Файлами называют, к примеру, совокупность записей, структурированных одинаково. Файлы бывают:</p>
27 <p>Здесь отдельного упоминания заслуживают<strong>файлы</strong>как структуры данных. Файлами называют, к примеру, совокупность записей, структурированных одинаково. Файлы бывают:</p>
28 <p>- последовательные;</p>
28 <p>- последовательные;</p>
29 <p>- прямого или комбинированного доступа;</p>
29 <p>- прямого или комбинированного доступа;</p>
30 <p>- организованные разделами.</p>
30 <p>- организованные разделами.</p>
31 <p>Следующий критерий - характеристика<strong>упорядоченности</strong>элементов.<strong>По признаку упорядоченности</strong>структуры бывают:</p>
31 <p>Следующий критерий - характеристика<strong>упорядоченности</strong>элементов.<strong>По признаку упорядоченности</strong>структуры бывают:</p>
32 <p>-<strong>нелинейные</strong>: деревья, графы, многосвязные списки;</p>
32 <p>-<strong>нелинейные</strong>: деревья, графы, многосвязные списки;</p>
33 <p>-<strong>линейные</strong>. По характеру распределения компонентов в памяти ЭВМ они могут иметь<em>последовательное распределение</em>(строки, векторы, массивы, стеки, очереди) и<em>произвольное связное распределение</em>(односвязные и двусвязные списки).</p>
33 <p>-<strong>линейные</strong>. По характеру распределения компонентов в памяти ЭВМ они могут иметь<em>последовательное распределение</em>(строки, векторы, массивы, стеки, очереди) и<em>произвольное связное распределение</em>(односвязные и двусвязные списки).</p>
34 <p>Когда мы указываем<strong>тип данных</strong>, мы четко определяем:</p>
34 <p>Когда мы указываем<strong>тип данных</strong>, мы четко определяем:</p>
35 <p>- размер памяти, который отводится под конкретную структуру;</p>
35 <p>- размер памяти, который отводится под конкретную структуру;</p>
36 <p>- способ размещения структуры в памяти;</p>
36 <p>- способ размещения структуры в памяти;</p>
37 <p>- значения, которые допустимы для этого типа данных;</p>
37 <p>- значения, которые допустимы для этого типа данных;</p>
38 <p>- операции, которые поддерживаются.</p>
38 <p>- операции, которые поддерживаются.</p>
39 <h2><strong>Простые структуры данных</strong></h2>
39 <h2><strong>Простые структуры данных</strong></h2>
40 <p>Как уже было сказано выше, это основа для создания более сложных структур. Также простые структуры называют примитивными либо базовыми (типами данных). Какие структуры сюда относят: </p>
40 <p>Как уже было сказано выше, это основа для создания более сложных структур. Также простые структуры называют примитивными либо базовыми (типами данных). Какие структуры сюда относят: </p>
41 <p>- битовые,</p>
41 <p>- битовые,</p>
42 <p>- числовые,</p>
42 <p>- числовые,</p>
43 <p>- логические,</p>
43 <p>- логические,</p>
44 <p>- перечисляемые,</p>
44 <p>- перечисляемые,</p>
45 <p>- символьные,</p>
45 <p>- символьные,</p>
46 <p>- интервальные,</p>
46 <p>- интервальные,</p>
47 <p>- указатели.</p>
47 <p>- указатели.</p>
48 <p>Для примера - структура простых типов для языка программирования Pascal:</p>
48 <p>Для примера - структура простых типов для языка программирования Pascal:</p>
49 <p>Далее - формат представления беззнаковых чисел:</p>
49 <p>Далее - формат представления беззнаковых чисел:</p>
50 <p>И формат представления чисел со знаком:</p>
50 <p>И формат представления чисел со знаком:</p>
51 <h2><strong>Статические структуры</strong></h2>
51 <h2><strong>Статические структуры</strong></h2>
52 <p>Это не что иное, как <strong>структурированное множество простых структур</strong>. К примеру, тот же вектор можно представить упорядоченным множеством чисел. Для статических структур изменчивость несвойственна, ведь размер памяти ЭВМ, который отводится для этих данных, является постоянным, выделяясь на этапе компиляции либо выполнения программы.</p>
52 <p>Это не что иное, как <strong>структурированное множество простых структур</strong>. К примеру, тот же вектор можно представить упорядоченным множеством чисел. Для статических структур изменчивость несвойственна, ведь размер памяти ЭВМ, который отводится для этих данных, является постоянным, выделяясь на этапе компиляции либо выполнения программы.</p>
53 <h3><strong>Вектор</strong></h3>
53 <h3><strong>Вектор</strong></h3>
54 <p>Вектором также называют и<strong>одномерный массив</strong>. Это структура данных, где число элементов фиксировано, причем речь идет об однотипных компонентах. У каждого компонента - свой индекс (уникальный номер). С физической точки зрения векторные компоненты размещаются в памяти в ячейках, расположенных подряд.</p>
54 <p>Вектором также называют и<strong>одномерный массив</strong>. Это структура данных, где число элементов фиксировано, причем речь идет об однотипных компонентах. У каждого компонента - свой индекс (уникальный номер). С физической точки зрения векторные компоненты размещаются в памяти в ячейках, расположенных подряд.</p>
55 <h3><strong>Двумерный массив</strong></h3>
55 <h3><strong>Двумерный массив</strong></h3>
56 <p>Двумерный массив (он же матрица) представляет собой вектор, причем каждый его элемент - тоже вектор. Если учесть внешние сходства, тогда то, что является справедливым для вектора, является справедливым и для матрицы.</p>
56 <p>Двумерный массив (он же матрица) представляет собой вектор, причем каждый его элемент - тоже вектор. Если учесть внешние сходства, тогда то, что является справедливым для вектора, является справедливым и для матрицы.</p>
57 <h3><strong>Множество</strong></h3>
57 <h3><strong>Множество</strong></h3>
58 <p>Это набор неповторяющихся данных одного типа. Множество способно принимать все значения базового типа, а так как он не должен превышать 256 значений, то типом элементов множеств могут быть char, byte и их производные.</p>
58 <p>Это набор неповторяющихся данных одного типа. Множество способно принимать все значения базового типа, а так как он не должен превышать 256 значений, то типом элементов множеств могут быть char, byte и их производные.</p>
59 <p>В памяти множество хранится в виде массива битов, причем каждый бит показывает, принадлежит ли элемент объявленному множеству. Таким образом, максимальное число элементов множества равно 256, а множество может занимать не больше 32 байт.</p>
59 <p>В памяти множество хранится в виде массива битов, причем каждый бит показывает, принадлежит ли элемент объявленному множеству. Таким образом, максимальное число элементов множества равно 256, а множество может занимать не больше 32 байт.</p>
60 <h3><strong>Записи</strong></h3>
60 <h3><strong>Записи</strong></h3>
61 <p>Комбинированный тип данных, в котором значения представляют собой нетривиальную структуру. Записи формируются из нескольких полей разного типа, причем внешний доступ к этим полям происходит по именам полей. Из этого можно сделать простейшее заключение:<strong>записи - это средство представления программных моделей реальных объектов</strong>, ведь реальный объект имеет несколько внешних свойств, описываемых разнотипными данными. </p>
61 <p>Комбинированный тип данных, в котором значения представляют собой нетривиальную структуру. Записи формируются из нескольких полей разного типа, причем внешний доступ к этим полям происходит по именам полей. Из этого можно сделать простейшее заключение:<strong>записи - это средство представления программных моделей реальных объектов</strong>, ведь реальный объект имеет несколько внешних свойств, описываемых разнотипными данными. </p>
62 <p>К примеру, с помощью записи можно описать преподавателя университета. В этом случае объект "преподаватель" будет иметь следующие характеристики:</p>
62 <p>К примеру, с помощью записи можно описать преподавателя университета. В этом случае объект "преподаватель" будет иметь следующие характеристики:</p>
63 <ul><li>табельный номер, представленный целым положительным числом;</li>
63 <ul><li>табельный номер, представленный целым положительным числом;</li>
64 <li>фамилия-имя-отчество, представленные строкой символов;</li>
64 <li>фамилия-имя-отчество, представленные строкой символов;</li>
65 <li>пол ("М", "Ж") - это символ;</li>
65 <li>пол ("М", "Ж") - это символ;</li>
66 <li>наличие ученой степени - строка символов;</li>
66 <li>наличие ученой степени - строка символов;</li>
67 <li>зарплата - вещественное число;</li>
67 <li>зарплата - вещественное число;</li>
68 <li>и так далее.</li>
68 <li>и так далее.</li>
69 </ul><p>В памяти компьютера это можно представить:</p>
69 </ul><p>В памяти компьютера это можно представить:</p>
70 <p>- в виде последовательности полей, которые занимают произвольную непрерывную область памяти:</p>
70 <p>- в виде последовательности полей, которые занимают произвольную непрерывную область памяти:</p>
71 <p>- в виде связного списка, имеющего указатели на значения полей записи:</p>
71 <p>- в виде связного списка, имеющего указатели на значения полей записи:</p>
72 <h2><strong>Полустатические структуры</strong></h2>
72 <h2><strong>Полустатические структуры</strong></h2>
73 <p>Характеристики:</p>
73 <p>Характеристики:</p>
74 <p>- переменная длина;</p>
74 <p>- переменная длина;</p>
75 <p>- поддержка простых способов изменения этой длины;</p>
75 <p>- поддержка простых способов изменения этой длины;</p>
76 <p>- изменение длины возможно не в произвольных, а в определенных пределах, которые не будут превышать максимально-допустимые (предельные) значения.</p>
76 <p>- изменение длины возможно не в произвольных, а в определенных пределах, которые не будут превышать максимально-допустимые (предельные) значения.</p>
77 <p><em>С точки зрения логики</em>полустатическая структура - это последовательность данных, связанная отношениями линейного списка. Доступ к элементу возможен по порядковому номеру.</p>
77 <p><em>С точки зрения логики</em>полустатическая структура - это последовательность данных, связанная отношениями линейного списка. Доступ к элементу возможен по порядковому номеру.</p>
78 <p><em>С физической точки зрения</em>полустатические структуры представлены в виде вектора, располагаясь в непрерывной области памяти ПК. Также их можно представить в качестве однонаправленного связного списка, где каждый последующий компонент адресуется указателем, который находится в текущем компоненте.</p>
78 <p><em>С физической точки зрения</em>полустатические структуры представлены в виде вектора, располагаясь в непрерывной области памяти ПК. Также их можно представить в качестве однонаправленного связного списка, где каждый последующий компонент адресуется указателем, который находится в текущем компоненте.</p>
79 <p>Примеры: стеки, строки, очереди, деки.</p>
79 <p>Примеры: стеки, строки, очереди, деки.</p>
80 <h2><strong>Динамические структуры</strong></h2>
80 <h2><strong>Динамические структуры</strong></h2>
81 <p>Не обладают постоянным размером, в результате чего память выделяется в момент создания элементов либо в процессе выполнения программы. Когда необходимость в элементе отпадает, занимаемая им память освобождается.</p>
81 <p>Не обладают постоянным размером, в результате чего память выделяется в момент создания элементов либо в процессе выполнения программы. Когда необходимость в элементе отпадает, занимаемая им память освобождается.</p>
82 <p>Так как компонент находится в памяти не по порядку и не в одной области, его адрес нельзя вычислить из адреса начального либо предыдущего компонента. Именно поэтому компонентная связь формируется через указатели, которые содержат соответствующие адреса в памяти. Это не что иное, как<strong>связное представление данных</strong>в памяти. Вывод напрашивается сам собой: такое представление обеспечивает высокую изменчивость структуры.</p>
82 <p>Так как компонент находится в памяти не по порядку и не в одной области, его адрес нельзя вычислить из адреса начального либо предыдущего компонента. Именно поэтому компонентная связь формируется через указатели, которые содержат соответствующие адреса в памяти. Это не что иное, как<strong>связное представление данных</strong>в памяти. Вывод напрашивается сам собой: такое представление обеспечивает высокую изменчивость структуры.</p>
83 <p><em>Преимущества</em>:</p>
83 <p><em>Преимущества</em>:</p>
84 <p>• размер структуры ограничивается лишь объемом памяти ЭВМ;</p>
84 <p>• размер структуры ограничивается лишь объемом памяти ЭВМ;</p>
85 <p>• во время изменения логической последовательности элементов (выполнении основных операций по удалению, добавлению, изменению порядка следования) нужна лишь коррекция указателей.</p>
85 <p>• во время изменения логической последовательности элементов (выполнении основных операций по удалению, добавлению, изменению порядка следования) нужна лишь коррекция указателей.</p>
86 <p><em>Недостатки</em>:</p>
86 <p><em>Недостатки</em>:</p>
87 <p>• работа с указателями требует от разработчика высокой квалификации;</p>
87 <p>• работа с указателями требует от разработчика высокой квалификации;</p>
88 <p>• на указатели тратится дополнительная память;</p>
88 <p>• на указатели тратится дополнительная память;</p>
89 <p>• на доступ тратится дополнительное время.</p>
89 <p>• на доступ тратится дополнительное время.</p>
90 <h3><strong>Связные линейные списки</strong></h3>
90 <h3><strong>Связные линейные списки</strong></h3>
91 <p>Это простейшие динамические структуры. Они представляют собой упорядоченные множества, которые содержат переменное число компонентов, причем отсутствуют ограничения по длине.</p>
91 <p>Это простейшие динамические структуры. Они представляют собой упорядоченные множества, которые содержат переменное число компонентов, причем отсутствуют ограничения по длине.</p>
92 <p>Ниже изображен<strong>односвязный список</strong>:</p>
92 <p>Ниже изображен<strong>односвязный список</strong>:</p>
93 <p>Что здесь что:</p>
93 <p>Что здесь что:</p>
94 <p>- INF - информационное поле, которое содержит данные;</p>
94 <p>- INF - информационное поле, которое содержит данные;</p>
95 <p>- NEXT - указатель на последующий компонент списка;</p>
95 <p>- NEXT - указатель на последующий компонент списка;</p>
96 <p>- "Голова списка" - указатель на начало;</p>
96 <p>- "Голова списка" - указатель на начало;</p>
97 <p>- nil - указатель на последний элемент.</p>
97 <p>- nil - указатель на последний элемент.</p>
98 <p>На практике использовать и обрабатывать односвязный список не всегда удобно, ведь нельзя перемещаться в противоположную сторону, что ставит под вопрос оперативное выполнение некоторых операций. Однако такая возможность существует у<strong>двухсвязного списка</strong>, ведь в нем каждый элемент обеспечивает хранение двух указателей: на последующий и на предыдущий компоненты. Также для удобства обработки он имеет особый элемент - указатель конца списка. Но за повышенное удобство и оперативное выполнение операций надо платить - в случае с двухсвязным списком наличие 2-х указателей в каждом компоненте повышает сложность и становится причиной дополнительных затрат памяти.</p>
98 <p>На практике использовать и обрабатывать односвязный список не всегда удобно, ведь нельзя перемещаться в противоположную сторону, что ставит под вопрос оперативное выполнение некоторых операций. Однако такая возможность существует у<strong>двухсвязного списка</strong>, ведь в нем каждый элемент обеспечивает хранение двух указателей: на последующий и на предыдущий компоненты. Также для удобства обработки он имеет особый элемент - указатель конца списка. Но за повышенное удобство и оперативное выполнение операций надо платить - в случае с двухсвязным списком наличие 2-х указателей в каждом компоненте повышает сложность и становится причиной дополнительных затрат памяти.</p>
99 <h2>Заключение</h2>
99 <h2>Заключение</h2>
100 <p>В качестве заключения скажем, что структуризация данных осуществляется сегодня множеством различных способов. Понимание особенностей структур данных, их строения, функций и основных характеристик позволит вам повысить качество создаваемого программного обеспечения, не говоря уже о более оперативной разработке. Также при определении формата данных нужно всегда учитывать специфику поставленных задач, делая это еще на этапе создания спецификаций и требований.</p>
100 <p>В качестве заключения скажем, что структуризация данных осуществляется сегодня множеством различных способов. Понимание особенностей структур данных, их строения, функций и основных характеристик позволит вам повысить качество создаваемого программного обеспечения, не говоря уже о более оперативной разработке. Также при определении формата данных нужно всегда учитывать специфику поставленных задач, делая это еще на этапе создания спецификаций и требований.</p>
101 <p><em>По материалам http://starik2222.narod.ru/trpp/lec2/19.htm.</em></p>
101 <p><em>По материалам http://starik2222.narod.ru/trpp/lec2/19.htm.</em></p>
102  
102