Стеки и очереди Flashcards

1
Q

Как работает стек? Пример из жизни?

A

Первый вошел — последний вышел.
Последний вошел — первый вышел.
Стопка тарелок, колода карт

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

Как работает очередь? Пример из жизни?

A

Первый вошел — первый вышел.
Последний вошел — последний вышел.
Очередь в магазине.

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

Почему RemoveAt(0) в List< T > имеет сложность O(n)?

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

O(1) в обоих случаях. Добавление — выделение памяти под один элемент и запись ссылки. Удаление — запись 1-2 ссылок и отложенное удаление одного элемента сборщиком мусора.

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

В чем проблема универсальной очереди (без generic-параметров, хранящей object-ы)?

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

Заполнитель для определенного типа, который будет передан при использовании generic-типа или generic-метода.

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

Как потребовать, чтобы тип, который будет передан в качестве generic-параметра содержал некоторые методы?

A

С помощью ключевого слова where и базового класса/структуры или интерфейсов:

class MyClass< T > where T : IWithMethods

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

Какие ограничения можно наложить на тип, передаваемый в качестве generic-параметра?

A
  1. Наследование от класса или структуры / реализация интерфейсов
  2. class или struct
  3. Наличие конструктора по-умолчанию new()
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

В определениях каких сущностей могут быть generic-параметры?

A

В классах (List< T >) интерфейсах (IEnumerable< T >) и методах (Tuple.Create< T1, T2 >)

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

Обязательно ли при использовании generic-метода передавать тип параметра?

A

Нет. Компилятор часто может вывести тип generic-параметров из типов аргументов метода, использованных при вызове.

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

Что означает out? Что нужно сделать внутри метода, если у него есть аргумент, помеченный out?

A

Внутри метода аргументу в обязательном порядке должно быть присвоено значение и оно будет возвращено в вызывающий метод.

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

Чем ref отличается от out?

A

ref позволяет вернуть новое значение из метода, как и out. Но при использовании ref в метод нужно передать какое-то первоначальное значение, которое в методе можно будет использовать.

17
Q

Зачем нужен generic-класс Tuple?

A

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

18
Q

Зачем нужен generic-класс Nullable?

A

Применяется к value-типам. Либо хранит значение value-типа, либо null. Нужен в случаях, когда значение value-типа может быть не задано.

19
Q

Перечислите способы вернуть несколько значений из метода

A

Вернуть экземпляр своего класса, в полях которого будут значения
Tuple
out, ref
Nullable для случая, если “несколько значений” — это 0 или 1

20
Q

Что лучше использовать для создания кортежа, конструктор класса Tuple или статический метод Tuple.Create? Почему?

A

При использовании Tuple.Create