Стеки и очереди Flashcards
Как работает стек? Пример из жизни?
Первый вошел — последний вышел.
Последний вошел — первый вышел.
Стопка тарелок, колода карт
Как работает очередь? Пример из жизни?
Первый вошел — первый вышел.
Последний вошел — последний вышел.
Очередь в магазине.
Почему стек вызовов называется стеком?
Выполняющийся сейчас метод покинет стек вызовов раньше любого другого метода из стека.
Почему RemoveAt(0) в List< T > имеет сложность O(n)?
После удаления первого элемента, каждый оставшийся элемент будет сдвинут к началу внутреннего массива.
Что такое связный список?
Список в котором каждый элемент имеет ссылку на следующий. В двусвязном списке еще и на предыдущий.
В чем отличие хранения в памяти связного списка и массива?
Элементы списка-вектора хранятся в памяти последовательно, друг за другом.
Какова сложность добавления элемента в связный список? Удаления элемента из связного списка? Почему?
O(1) в обоих случаях. Добавление — выделение памяти под один элемент и запись ссылки. Удаление — запись 1-2 ссылок и отложенное удаление одного элемента сборщиком мусора.
В чем проблема универсальной очереди (без generic-параметров, хранящей object-ы)?
Можно положить что угодно, но надо кастовать, когда достаешь.
Что такое даункаст?
Каст от родителя к потомку.
Что такое дженерик-параметры?
Заполнитель для определенного типа, который будет передан при использовании generic-типа или generic-метода.
Как потребовать, чтобы тип, который будет передан в качестве generic-параметра содержал некоторые методы?
С помощью ключевого слова where и базового класса/структуры или интерфейсов:
class MyClass< T > where T : IWithMethods
Какие ограничения можно наложить на тип, передаваемый в качестве generic-параметра?
- Наследование от класса или структуры / реализация интерфейсов
- class или struct
- Наличие конструктора по-умолчанию new()
В определениях каких сущностей могут быть generic-параметры?
В классах (List< T >) интерфейсах (IEnumerable< T >) и методах (Tuple.Create< T1, T2 >)
Обязательно ли при использовании generic-метода передавать тип параметра?
Нет. Компилятор часто может вывести тип generic-параметров из типов аргументов метода, использованных при вызове.
Что означает out? Что нужно сделать внутри метода, если у него есть аргумент, помеченный out?
Внутри метода аргументу в обязательном порядке должно быть присвоено значение и оно будет возвращено в вызывающий метод.
Чем ref отличается от out?
ref позволяет вернуть новое значение из метода, как и out. Но при использовании ref в метод нужно передать какое-то первоначальное значение, которое в методе можно будет использовать.
Зачем нужен generic-класс Tuple?
Чтобы хранить и возвращать несколько связанных значений, без необходимости создавать для этого специальный класс.
Зачем нужен generic-класс Nullable?
Применяется к value-типам. Либо хранит значение value-типа, либо null. Нужен в случаях, когда значение value-типа может быть не задано.
Перечислите способы вернуть несколько значений из метода
Вернуть экземпляр своего класса, в полях которого будут значения
Tuple
out, ref
Nullable для случая, если “несколько значений” — это 0 или 1
Что лучше использовать для создания кортежа, конструктор класса Tuple или статический метод Tuple.Create? Почему?
При использовании Tuple.Create