Стеки и очереди 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?
Внутри метода аргументу в обязательном порядке должно быть присвоено значение и оно будет возвращено в вызывающий метод.