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></li>
3
<li><a>Очереди</a></li>
4
<li><a>Множества</a></li>
4
<li><a>Множества</a></li>
5
<li><a>Map</a></li>
5
<li><a>Map</a></li>
6
<li><a>Хэш-таблицы</a></li>
6
<li><a>Хэш-таблицы</a></li>
7
<li><a>Двоичное дерево поиска</a></li>
7
<li><a>Двоичное дерево поиска</a></li>
8
<li><a>Префиксное дерево</a></li>
8
<li><a>Префиксное дерево</a></li>
9
<li><a>Двоичная куча</a></li>
9
<li><a>Двоичная куча</a></li>
10
<li><a>Графы</a></li>
10
<li><a>Графы</a></li>
11
</ul><p>Важное условие хранения данных в памяти ПК - возможность преобразования этих данных в форму, которая понятна компьютеру. Не менее важно подобрать структуру, которая будет подходить для конкретных типов данных, то есть предоставит исчерпывающий набор возможностей для работы с имеющейся информацией. Именно для этого<strong>следует знать основные структуры данных и уметь с ними работать</strong>. Вдобавок к этому, важно понимать, что структуры данных - важнейшая часть разработки программ и одна из самых распространенных тем на собеседованиях. В этой статье мы расскажем о десяти наиболее распространенных структурах, большинство их которых очень хорошо известны.</p>
11
</ul><p>Важное условие хранения данных в памяти ПК - возможность преобразования этих данных в форму, которая понятна компьютеру. Не менее важно подобрать структуру, которая будет подходить для конкретных типов данных, то есть предоставит исчерпывающий набор возможностей для работы с имеющейся информацией. Именно для этого<strong>следует знать основные структуры данных и уметь с ними работать</strong>. Вдобавок к этому, важно понимать, что структуры данных - важнейшая часть разработки программ и одна из самых распространенных тем на собеседованиях. В этой статье мы расскажем о десяти наиболее распространенных структурах, большинство их которых очень хорошо известны.</p>
12
<h2>Связные списки и массивы</h2>
12
<h2>Связные списки и массивы</h2>
13
<p>Связный список нередко сравнивают с массивом, ведь многие другие структуры данных можно реализовать или посредством массива, или посредством связного (связанного) списка. Хотя и массив, и список, имеют свои плюсы и минусы.</p>
13
<p>Связный список нередко сравнивают с массивом, ведь многие другие структуры данных можно реализовать или посредством массива, или посредством связного (связанного) списка. Хотя и массив, и список, имеют свои плюсы и минусы.</p>
14
<p><strong>Связный список</strong>- это группа узлов, вместе представляющих собой последовательность. Каждый такой узел включает в себя:</p>
14
<p><strong>Связный список</strong>- это группа узлов, вместе представляющих собой последовательность. Каждый такой узел включает в себя:</p>
15
<p>- фактические данные, которые хранятся;</p>
15
<p>- фактические данные, которые хранятся;</p>
16
<p>- ссылку-указатель на следующий в последовательности узел.</p>
16
<p>- ссылку-указатель на следующий в последовательности узел.</p>
17
<p>Также выделяют дважды связанные списки, где каждый узел имеет указатель как на следующий элемент в списке, так и на предыдущий.</p>
17
<p>Также выделяют дважды связанные списки, где каждый узел имеет указатель как на следующий элемент в списке, так и на предыдущий.</p>
18
<p>Основные операции:</p>
18
<p>Основные операции:</p>
19
<ul><li>добавление элемента;</li>
19
<ul><li>добавление элемента;</li>
20
<li>удаление элемента;</li>
20
<li>удаление элемента;</li>
21
<li>поиск в списке.</li>
21
<li>поиск в списке.</li>
22
</ul><p>Отдельное внимание стоит уделить<strong>массивам</strong>- это структуры данных, обеспечивающие хранение<strong>элементов</strong>, имеющих схожий тип данных. Такие элементы находятся в смежных местах памяти (каждый элемент массива - в своей ячейке). Общее число элементов в массиве характеризует его<strong>длину</strong>. Доступ к данным массива осуществляется по позиции конкретного элемента, для чего используется ссылка, называемая<strong>индексом</strong>массива.</p>
22
</ul><p>Отдельное внимание стоит уделить<strong>массивам</strong>- это структуры данных, обеспечивающие хранение<strong>элементов</strong>, имеющих схожий тип данных. Такие элементы находятся в смежных местах памяти (каждый элемент массива - в своей ячейке). Общее число элементов в массиве характеризует его<strong>длину</strong>. Доступ к данным массива осуществляется по позиции конкретного элемента, для чего используется ссылка, называемая<strong>индексом</strong>массива.</p>
23
<p>Особенности массива:</p>
23
<p>Особенности массива:</p>
24
<ul><li>элементы находятся в смежных ячейках памяти;</li>
24
<ul><li>элементы находятся в смежных ячейках памяти;</li>
25
<li>индекс меньше, чем общее число элементов;</li>
25
<li>индекс меньше, чем общее число элементов;</li>
26
<li>переменная, объявленная в качестве массива, способна хранить несколько значений;</li>
26
<li>переменная, объявленная в качестве массива, способна хранить несколько значений;</li>
27
<li>практически любой язык программирования одинаково понимает массив, однако может по-разному его объявлять и инициализировать, то есть решения в программном коде могут отличаться реализацией.</li>
27
<li>практически любой язык программирования одинаково понимает массив, однако может по-разному его объявлять и инициализировать, то есть решения в программном коде могут отличаться реализацией.</li>
28
</ul><p>Массивы способны иметь разное количество измерений. Вот как выглядит одномерный массив:</p>
28
</ul><p>Массивы способны иметь разное количество измерений. Вот как выглядит одномерный массив:</p>
29
<p>Массив<em>a</em>имеет только одну строку и размер 16 ячеек. Доступ к элементу осуществляется по индексу, причем максимальный индекс равняется 15, так как<strong>нумерация начинается с нуля</strong>.</p>
29
<p>Массив<em>a</em>имеет только одну строку и размер 16 ячеек. Доступ к элементу осуществляется по индексу, причем максимальный индекс равняется 15, так как<strong>нумерация начинается с нуля</strong>.</p>
30
<p>Бывают массивы с двумя измерениями (двухмерные), тремя (трехмерные) и т. п., то есть они могут быть<em>n</em>-мерными. Двумерный массив уже можно назвать<strong>матрицей</strong>. Доступ к элементу такой матрицы уже будет осуществляться по<em>i</em>-й строке и<em>j</em>-м столбце -<em>a[i][j]</em>.</p>
30
<p>Бывают массивы с двумя измерениями (двухмерные), тремя (трехмерные) и т. п., то есть они могут быть<em>n</em>-мерными. Двумерный массив уже можно назвать<strong>матрицей</strong>. Доступ к элементу такой матрицы уже будет осуществляться по<em>i</em>-й строке и<em>j</em>-м столбце -<em>a[i][j]</em>.</p>
31
<p>Кратко о том, зачем вообще нужны массивы:</p>
31
<p>Кратко о том, зачем вообще нужны массивы:</p>
32
<ul><li>массивы - хорошее решение, если надо хранить в одной переменной несколько значений;</li>
32
<ul><li>массивы - хорошее решение, если надо хранить в одной переменной несколько значений;</li>
33
<li>в такой структуре проще и быстрее обрабатывать однотипные данные, выполнять поиск и сортировку.</li>
33
<li>в такой структуре проще и быстрее обрабатывать однотипные данные, выполнять поиск и сортировку.</li>
34
</ul><p>На практике в программировании чаще используют в качестве структур данных одномерные и двумерные массивы.</p>
34
</ul><p>На практике в программировании чаще используют в качестве структур данных одномерные и двумерные массивы.</p>
35
<h2>Стеки</h2>
35
<h2>Стеки</h2>
36
<p>Стек напоминает стопку, содержащую книги или учебники: если нужна книга из середины, надо сначала взять те книги, которые находятся сверху. То есть это структура данных, при работе с которой можно вставлять либо удалять элементы только в начале. Последний добавленный элемент является первым, который из этого стека выходит (<em>Last In First Out - LIFO</em>), то есть компоненты добавляются и удаляются лишь с одного конца - так называемой вершины стека.</p>
36
<p>Стек напоминает стопку, содержащую книги или учебники: если нужна книга из середины, надо сначала взять те книги, которые находятся сверху. То есть это структура данных, при работе с которой можно вставлять либо удалять элементы только в начале. Последний добавленный элемент является первым, который из этого стека выходит (<em>Last In First Out - LIFO</em>), то есть компоненты добавляются и удаляются лишь с одного конца - так называемой вершины стека.</p>
37
<h2>Очереди</h2>
37
<h2>Очереди</h2>
38
<p>Просто вспоминаем очередь в продуктовом гипермаркете. Тот, кто стоит первым, первым и обслуживается.</p>
38
<p>Просто вспоминаем очередь в продуктовом гипермаркете. Тот, кто стоит первым, первым и обслуживается.</p>
39
<p>Но эта структура данных, в отличие от предыдущей, организована по принципу<em>First In First Out</em>(FIFO). Элементы добавляются с одного конца (enqueue), а удаляются с противоположного (dequeue). Кто первый пришел, первый и уйдет (будет "обслужен на кассе").</p>
39
<p>Но эта структура данных, в отличие от предыдущей, организована по принципу<em>First In First Out</em>(FIFO). Элементы добавляются с одного конца (enqueue), а удаляются с противоположного (dequeue). Кто первый пришел, первый и уйдет (будет "обслужен на кассе").</p>
40
<h2>Множества</h2>
40
<h2>Множества</h2>
41
<p>С помощью множеств данные хранятся без определенного порядка, а также, что немаловажно,<strong>без повторяющихся значений</strong>. Элементы можно добавлять, удалять, объединять, создавать подмножества и т. д. </p>
41
<p>С помощью множеств данные хранятся без определенного порядка, а также, что немаловажно,<strong>без повторяющихся значений</strong>. Элементы можно добавлять, удалять, объединять, создавать подмножества и т. д. </p>
42
<h2>Map</h2>
42
<h2>Map</h2>
43
<p>Структура, хранящая данные в парах ключ-значение, причем каждый ключ в такой структуре является уникальным. Другое название - словарь или ассоциативный массив. Неплохое решение для быстрого поиска данных.</p>
43
<p>Структура, хранящая данные в парах ключ-значение, причем каждый ключ в такой структуре является уникальным. Другое название - словарь или ассоциативный массив. Неплохое решение для быстрого поиска данных.</p>
44
<p>Можно добавлять/удалять пары из коллекции, менять уже существующие пары, искать значения, связанные с конкретным ключом.</p>
44
<p>Можно добавлять/удалять пары из коллекции, менять уже существующие пары, искать значения, связанные с конкретным ключом.</p>
45
<h2>Хэш-таблицы</h2>
45
<h2>Хэш-таблицы</h2>
46
<p>Эта структура реализует интерфейс map, который, как и в предыдущем случае, позволяет хранить пары<strong>ключ-значение</strong>. Для вычисления индекса в массиве данных используется хэш-функция. Подробнее о хэш-функции и алгоритме хэширования можете почитать<a>в этой статье</a>.</p>
46
<p>Эта структура реализует интерфейс map, который, как и в предыдущем случае, позволяет хранить пары<strong>ключ-значение</strong>. Для вычисления индекса в массиве данных используется хэш-функция. Подробнее о хэш-функции и алгоритме хэширования можете почитать<a>в этой статье</a>.</p>
47
<h2>Двоичное дерево поиска</h2>
47
<h2>Двоичное дерево поиска</h2>
48
<p>Дерево (древо) представляет собой структуру данных, состоящих из узлов, причем:</p>
48
<p>Дерево (древо) представляет собой структуру данных, состоящих из узлов, причем:</p>
49
<ol><li>У каждого дерева есть корневой узел (расположен сверху).</li>
49
<ol><li>У каждого дерева есть корневой узел (расположен сверху).</li>
50
<li>У каждого корневого узла есть 0 и более дочерних узлов.</li>
50
<li>У каждого корневого узла есть 0 и более дочерних узлов.</li>
51
<li>У каждого дочернего тоже есть 0 и более дочерних узлов и так далее.</li>
51
<li>У каждого дочернего тоже есть 0 и более дочерних узлов и так далее.</li>
52
</ol><p>Двоичное дерево обладает двумя дополнительными свойствами:</p>
52
</ol><p>Двоичное дерево обладает двумя дополнительными свойствами:</p>
53
<ol><li>У каждого узла - до 2 потомков (детей).</li>
53
<ol><li>У каждого узла - до 2 потомков (детей).</li>
54
<li>Для каждого узла значения левых потомков меньше значения текущего узла и меньше значения правых потомков.</li>
54
<li>Для каждого узла значения левых потомков меньше значения текущего узла и меньше значения правых потомков.</li>
55
</ol><p>Двоичные деревья поиска используются для быстрого нахождения, добавления или удаления элементов.</p>
55
</ol><p>Двоичные деревья поиска используются для быстрого нахождения, добавления или удаления элементов.</p>
56
<h2>Префиксное дерево</h2>
56
<h2>Префиксное дерево</h2>
57
<p>Дерево префикса - дерево поиска. Данные хранятся в шагах, каждый из шагов - узел. Благодаря возможности быстрого поиска и наличия функции автоматического дописывания, префиксное древо часто применяют при хранении слов.</p>
57
<p>Дерево префикса - дерево поиска. Данные хранятся в шагах, каждый из шагов - узел. Благодаря возможности быстрого поиска и наличия функции автоматического дописывания, префиксное древо часто применяют при хранении слов.</p>
58
<p>Каждый узел - это одна буква слова. Чтобы записать слово, надо следовать ветвям. На картинке выше содержатся следующие слова:</p>
58
<p>Каждый узел - это одна буква слова. Чтобы записать слово, надо следовать ветвям. На картинке выше содержатся следующие слова:</p>
59
<h2>Двоичная куча</h2>
59
<h2>Двоичная куча</h2>
60
<p>Двоичная куча - тоже дерево с узлом, в котором не больше двух детей. Оно характеризуется полнотой - все уровни заполнены полностью, причем последний заполняется слева направо. Бывает минимальным либо максимальным.</p>
60
<p>Двоичная куча - тоже дерево с узлом, в котором не больше двух детей. Оно характеризуется полнотой - все уровни заполнены полностью, причем последний заполняется слева направо. Бывает минимальным либо максимальным.</p>
61
<h2>Графы</h2>
61
<h2>Графы</h2>
62
<p>Это совокупности<strong>узлов</strong>, называющимися вершинами, и<strong>ребер</strong>(связей между этими вершинами). Еще графы называют сетями. Понять суть можно, вспомнив социальную сеть в интернете. Вершины - это люди, ребра - дружеские связи между людьми.</p>
62
<p>Это совокупности<strong>узлов</strong>, называющимися вершинами, и<strong>ребер</strong>(связей между этими вершинами). Еще графы называют сетями. Понять суть можно, вспомнив социальную сеть в интернете. Вершины - это люди, ребра - дружеские связи между людьми.</p>
63
<p>Графы бывают:</p>
63
<p>Графы бывают:</p>
64
<p>- ориентированными (с направлением);</p>
64
<p>- ориентированными (с направлением);</p>
65
<p>- неориентированными (без какого-нибудь направления на ребрах между вершинами).</p>
65
<p>- неориентированными (без какого-нибудь направления на ребрах между вершинами).</p>
66
<p>Частные способы представления графа - матрица смежности и список смежности.</p>
66
<p>Частные способы представления графа - матрица смежности и список смежности.</p>
67
<a></a><p><em>Источник: https://www.freecodecamp.org/news/10-common-data-structures-explained-with-videos-exercises-aaff6c06fb2b/.</em></p>
67
<a></a><p><em>Источник: https://www.freecodecamp.org/news/10-common-data-structures-explained-with-videos-exercises-aaff6c06fb2b/.</em></p>
68
<p>Нашли ошибку во время чтения материала? Пишите комментарий!</p>
68
<p>Нашли ошибку во время чтения материала? Пишите комментарий!</p>
69
69