СИАКОД Flashcards

(27 cards)

1
Q

Абстрактный тип данных (АТД)

A

АТД (абстрактный тип данных) – это математическая модель данных и совокупность операций, определенных в рамках этой модели. Определим структуру данных как набор следующих компонент:

  1. совокупность операций с данными;
  2. структура хранения данных в памяти;
  3. реализация каждой операции.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Линейный однонаправленный список. Описание

A

Линейный однонаправленный список - это структура данных, состоящая из элементов одного типа, связанных между собой последовательно посредством указателей. Каждый элемент списка имеет указатель на следующий элемент. Последний элемент списка указывает на NULL. Элемент, на который нет указателя, является первым (головным) элементом списка. Здесь ссылка в каждом узле указывает на следующий узел в списке. В односвязном списке можно передвигаться только в сторону конца списка. Узнать адрес предыдущего элемента, опираясь на содержимое текущего узла, невозможно.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Линейный однонаправленный список. Множество операций

A
  • создание пустого списка;
  • вставка нового элемента в или после позиции р;
  • получение доступа к элементу в позиции р для проверки и\или изменения;
  • переход к следующему или предыдущему элементу.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Линейный однонаправленный список. Способы реализации

A
  • посредством массивов (последовательное распределение памяти) в этом случае все элементы списка хранятся в смежных ячейках;
  • при помощи связных списков.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Линейный однонаправленный список. Характеристики

A
  • длина списка - количество элементов в списке;
  • списки могут быть типизированными или нетипизированными, если список типизирован, то тип его элементов задан, и все его элементы должны иметь типы, совместимые с заданным типом элементов списка (обычно списки, реализованные при помощи массивов, являются типизированными);
  • список может быть сортированным или несортированным;
  • в зависимости от реализации может быть возможен произвольный доступ к элементам списка.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Линейный однонаправленный список. Двусвязный список

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Линейный однонаправленный список. Кольцевой связный список

A

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

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Линейный однонаправленный список. Достоинства связных списков

A
  • лёгкость добавления и удаления элементов;
  • размер ограничен только объёмом памяти компьютера и разрядностью указателей;
  • динамическое добавление и удаление элементов.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Линейный однонаправленный список. Недостатки связных списков

A
  • сложность определения адреса элемента по его индексу (номеру) в списке;
  • на поля-указатели (указатели на следующий и предыдущий элемент) расходуется дополнительная память (в массивах, например, указатели не нужны);
  • работа со списком медленнее, чем с массивами, так как к любому элементу списка можно обратиться, только пройдя все предшествующие ему элементы;
  • элементы списка могут быть расположены в памяти разреженно, что окажет негативный эффект на кэширование процессора;
  • над связными списками гораздо труднее (хотя и в принципе возможно) производить параллельные векторные операции, такие как вычисление суммы;
  • кэш-промахи при обходе списка.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Стек. Описание

A

Стек (англ. stack - стопка) - структура данных, представляющая собой список элементов, организованных по принципу LIFO (англ. last in — first out, «последним пришёл — первым вышел»). Чаще всего принцип работы стека сравнивают со стопкой тарелок: чтобы взять вторую сверху, нужно снять верхнюю.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Стек. Организация в памяти

A

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

Значением переменной стека является указатель на вершину стека. Если стек пуст, то значение указателя равно NULL.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Стек. Операции со стеком

A

Возможны три операции со стеком: добавление элемента (иначе проталкивание, push), удаление элемента (pop) и чтение головного элемента (peek).

При проталкивании (push) указывается новый элемент, указывающий на элемент бывший до этого головой. Новый элемент теперь становится головным.

При удалении элемента убирается первый, а головным становится тот, на который был указатель у этого объекта (следующий элемент).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Очередь. Описание

A

Очередь - структура данных с дисциплиной доступа к элементам «первый пришёл - первый вышел» (FIFO, First In — First Out). Добавление элемента (принято обозначать словом enqueue — поставить в очередь) возможно лишь в конец очереди, выборка — только из начала очереди (что принято называть словом dequeue — убрать из очереди), при этом выбранный элемент из очереди удаляется.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Очередь. Массивы. Принцип работы

A

Обычно start указывает на голову очереди, end — на элемент, который заполнится, когда в очередь войдёт новый элемент. При добавлении элемента в очередь в q[end] записывается новый элемент очереди, а end уменьшается на единицу. Если значение end становится меньше 1, то мы как бы циклически обходим массив и значение переменной становится равным n. Извлечение элемента из очереди производится аналогично: после извлечения элемента q[start] из очереди переменная start уменьшается на 1. С такими алгоритмами одна ячейка из n всегда будет незанятой (так как очередь с n элементами невозможно отличить от пустой), что компенсируется простотой алгоритмов.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Очередь. Массивы. Преимущества

A
  • возможна незначительная экономия памяти по сравнению со способом на связных списках;
  • проще в разработке.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Очередь. Массивы. Недостатки

A
  • максимальное количество элементов в очереди ограничено размером массива.
  • при его переполнении требуется перевыделение памяти и копирование всех элементов в новый массив.
17
Q

Очередь. Связные списки. Описание

A

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

18
Q

Очередь. Связные списки. Преимущества

A

Размер очереди ограничен лишь объёмом памяти

19
Q

Очередь. Связные списки. Недостатки

A
  • сложнее в разработке;
  • требуется больше памяти;
  • при работе с такой очередью память сильнее фрагментируется;
  • работа с очередью несколько медленнее.
20
Q

Очередь. Способы реализации очереди

A
  • массивы;
  • связный список;
  • на двух стеках.
21
Q

Дерево. Описание

A

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

22
Q

Дерево. Корневой узел

A

Корневой узел - самый верхний узел дерева.

23
Q

Дерево. Корень

A

Корень - одна из вершин, по желанию наблюдателя.

24
Q

Дерево. Лист

A

Лист, листовой или терминальный узел — узел, не имеющий дочерних элементов.

25
Дерево. **Внутренний узел**
**Внутренний узел** - любой узел дерева, имеющий потомков, и таким образом, не являющийся листовым узлом.
26
Дерево. **Ориентированное дерево**
Дерево считается **ориентированным**, если в корень не заходит ни одно ребро, а в каждый узел входит ровно одно ребро.
27
Дерево. **Общие операции с деревьями**
* вставка нового элемента в определённую позицию; * вставка поддерева; * добавление ветви дерева (называется прививкой); * нахождение корневого элемента для любого узла; * нахождение наименьшего общего предка двух вершин; * перебор всех элементов дерева; * перебор элементов ветви дерева; * поиск изоморфного поддерева; * поиск элемента; * удаление ветви дерева (называется обрезкой); * удаление поддерева; * удаление элемента.