Sem II (Program I) - N8 Flashcards

(50 cards)

1
Q

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

A

Структура данных – это упорядочивание и/или связывание данных для их эффективного управления. Примером является массив.

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

Welche Nachteile haben Arrays als Datenstruktur?

A

Массивы статические (фиксированного размера), негибкие (доступ только через индексы), а вставка или удаление элементов в середине требует копирования элементов.

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

Wie unterscheiden sich dynamische Datenstrukturen von statischen?

A

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

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

Welche Bestandteile hat eine Liste als dynamische Datenstruktur?

A

Список состоит из двух классов: класса для определения узла и класса для определения самого списка.

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

Was enthält ein Knoten(узел) in einer Liste?

A

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

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

Welche Vorteile bietet eine doppelt verkettete Liste?

A

Он позволяет осуществлять обход в обоих направлениях.

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

Welche Nachteile hat eine doppelt verkettete Liste?

A

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

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

Wie wird ein einfacher Knoten in Java definiert?

A

Посредством рекурсивного объявления класса с полями для данных (data) и следующего узла (next).

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

Welche Zugriffsmodifikatoren können für die Attribute eines Knotens verwendet werden?

A

Public: Kein Schutz.
Private: Zugriff über Getter und Setter.
Default: Schutz innerhalb des Pakets.
Elementklasse: Knoten als Teil der Listenklasse definiert.

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

Какие методы обычны в классе узла?

A

Getter (getData, getNext) und Setter (setData, setNext) für Attribute.

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

Was ist die Aufgabe der Listen-Klasse?

A

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

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

Wie wird eine doppelt verkettete Liste in Java implementiert?

A

Durch Hinzufügen eines zusätzlichen Zeigers (prev) in der Knotenklasse.

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

Was sind geschachtelte Klassen und wie unterscheiden sie sich von Vererbung?

A

Вложенные классы - это классы, определенные внутри других классов. Они не имеют отношения к наследованию, хотя могут нормально наследоваться от внешних классов.

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

Welche Sichtbarkeitsmodifikatoren können geschachtelte Klassen haben?

A

Geschachtelte Klassen können private, protected, default oder public sein.

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

Welche Einschränkungen gelten für Elementklassen?

A

Elementklassen dürfen keine statischen Elemente enthalten, außer Konstanten (static final).

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

Wie wird eine Instanz einer inneren Klasse erstellt?

A
Outer.Inner obj = outerObj.new Inner();
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Was ist das LIFO-Prinzip bei einem Stack?

A

По принципу Last-In-First-Out (LIFO) первым удаляется последний добавленный элемент.

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

Welche Operationen bietet ein Stack an?

A

push: Fügt ein Element oben hinzu.
pop: Entfernt das oberste Element und gibt es zurück.
top (peek): Gibt das oberste Element zurück, ohne es zu entfernen.

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

Wie wird ein Stack als Array implementiert?

A
private int[] stack;
private int count;
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Wie wird ein Stack als Liste implementiert?

A
class Stack {
    private Node top = null;
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Welche Vorteile bieten innere Klassen?

A

- Lokale Definitionen für Hilfsklassen.
- Verbergen von Implementierungsdetails.
- Flexibler Mechanismus für GUI-Programmierung, z. B. Event-Handler.

22
Q

Welche Nachteile haben innere Klassen?

A

- Unübersichtliche Klassenstruktur.
- Komplexe Vererbung.
- Abhängigkeit von der äußeren Klasse erschwert die Objekterzeugung.

23
Q

Wie wird die Länge einer verketteten Liste bestimmt?

A

Путем итерации по списку и подсчета узлов до достижения null.

24
Q

Was sind die Vorteile von Arrays im Vergleich zu Listen?

A

- Быстрый доступ к элементам по индексу (сложность O(1)).
- Эффективное добавление элементов в конец.

25
**Wie implementiert man eine Methode, um ein Element an einer bestimmten Position in eine Liste einzufügen?**
**Путем прохождения списка до нужной позиции и корректировки указателей предыдущего и нового узла (Node).**
26
**Что происходит при удалении элемента из связанного списка?**
**-** Поиск элемента. **-** Корректировка указателей для удаления элемента из цепочки.
27
**Что такое Node в связанном списке и какие атрибуты он имеет?**
**data:** хранимые данные. **next:** ссылка на следующий узел.
28
**Was ist der Unterschied zwischen einer Liste und einem Array?**
**Liste:** **-** Динамический, размер может быть изменен во время выполнения. **-** Добавление и удаление элементов происходит без перемещения (сложность O(1)). **Array:** **-** Прямой доступ к элементам очень быстрый (O(1)). **-** Эффективен при добавлении элементов в конец.
29
**Wie ist ein Baum definiert?**
**-** Корень без родительского узла. **-** Каждый узел, кроме корня, имеет ровно один родительский узел. **-** Существует ровно один путь от корня к любому другому узлу (без циклов).
30
**Was ist ein Blatt in der Baum-Terminologie?**
Лист (терминальный узел) – **это узел без дочерних узлов.**
31
**Wie wird die Tiefe und Höhe eines Baumes definiert?**
**Tiefe eines Knotens:** Abstand von der Wurzel zum Knoten. **Höhe des Baumes:** Maximale Entfernung von der Wurzel bis zu einem Blatt
32
**Was ist ein Binärbaum?**
Ein Binärbaum ist ein Baum, **bei dem jeder Knoten höchstens zwei Kindknoten hat** (**linker** und **rechter Teilbaum**).
33
**Welche Eigenschaften hat ein vollständiger Binärbaum?**
**-** Ein vollständiger Binärbaum mit Höhe ( n ) besitzt: **----** ( 2^n ) Blätter. **----** Insgesamt ( 2^{n+1} - 1 ) Knoten.
34
**In welchen Anwendungsfällen werden Bäume genutzt?**
**-** Деревья принятия решений в играх и искусственном интеллекте. **-** Деревья вывода при компиляции для проверки синтаксиса. **-** Организация доступа к данным в базах данных (например, отсортированное и сбалансированное бинарное дерево).
35
**Was sind die Effizienzvorteile von sortierten, ausbalancierten Bäumen?**
**-** Effiziente Realisierung von Grundoperationen: **----** Suchen: ( O(\log_2(n)) ) **----** Einfügen und Löschen: ( O(\log_2(n)) )
36
**Wie wird ein Binärbaum in Java implementiert?**
``` public class BinNode { int data; BinNode left, right; BinNode(int d) { data = d; left = right = null; } } ```
37
**Welche Zugriffsmodifikatoren sind für die BinNode-Datenfelder sinnvoll?**
**public:** Keine Schutzmechanismen. **private:** Zugriff über Getter/Setter, aber langsamer. **default:** Schutz auf Paketebene, effizienter Zugriff. **Als innere Klasse in der Baum-Klasse für spezifischen Zugriffsschutz.**
38
**Что такое бинарное дерево?**
Бинарное дерево - это структура данных, в которой **каждый узел имеет максимально два дочерних узла: левый и правый.**
39
**Wie kann ein Binärbaum in Java initialisiert werden?**
Mit der Klasse **BinTree und Knoten der Klasse BinNode. Beispiel:** ``` BinNode k1 = new BinNode(6); BinNode k2 = new BinNode(7); BinNode m1 = new BinNode(4, k1, k2); BinTree baum = new BinTree(m1); ```
40
**Как работает алгоритм подсчета узлов бинарного дерева?**
**-** Если дерево пустое, количество узлов равно 0. **-** В противном случае: количество узлов = 1 + количество узлов в левом поддереве + количество узлов в правом поддереве.
41
**Wie lautet die Java-Implementierung zum Zählen der Knoten eines Binärbaums?**
``` private int countNodes(BinNode k) { if (k == null) return 0; return 1 + countNodes(k.left) + countNodes(k.right); } public int countNodes() { return countNodes(root); } ```
42
**Wie wird die Tiefe eines Binärbaums berechnet?**
**-** Если дерево пустое или является листовым узлом, глубина равна 0. **-** В противном случае: глубина = 1 + max(глубина левого поддерева, глубина правого поддерева
43
**Wie lautet die Java-Implementierung zur Berechnung der Tiefe eines Binärbaums?**
``` private int calculateDepth(BinNode k) { if (k == null || (k.left == null && k.right == null)) return 0; return 1 + Math.max(calculateDepth(k.left), calculateDepth(k.right)); } public int calculateDepth() { return calculateDepth(root); } ```
44
**Was ist die Serialisierung eines Binärbaums?**
**Preorder:** (Wurzel (linker Teilbaum) (rechter Teilbaum)) **Beispiel** für Baum mit Wurzel 1: ((((6)4(7))2(5))1(3)).
45
**Что понимается под обходом бинарного дерева?**
**Обход означает посещение каждого узла в дереве по крайней мере один раз. Это необходимо для таких операций, как подсчет узлов, вычисление глубины дерева или поиск узлов с определенным значением.**
46
**Что такое поиск в глубину (прямой обход) в бинарном дереве?**
**-** Посетить корень. **-** Обойти левое поддерево. **-** Обойти правое поддерево
47
**Какие еще существуют стратегии обхода?**
**Inorder:** (linker Teilbaum) Wurzel (rechter Teilbaum) **Postorder:** (linker Teilbaum)(rechter Teilbaum) Wurzel
48
**Wie funktioniert der Algorithmus für die Breitensuche in einem Binärbaum in Java?**
**1)** Корень добавляется в очередь. **2)** Пока очередь не пуста: **-** Удаляется первый элемент. **-** Выполняется нужное действие (например, вывод данных). **-** Левый и правый дочерние узлы текущего узла добавляются в очередь.
49
**Какая структура данных используется для поиска в ширину?**
**Eine Warteschlange.**
50
**Wie funktioniert die nicht-rekursive Tiefensuche in einem Binärbaum?**
**1)** Поместить корень на стек. **2)** Пока стек не пуст: **-** Взять верхний узел со стека (pop). **-** Выполнить нужное действие. **-** Поместить дочерние узлы узла (сначала правый, затем левый) на стек.