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></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