список и двухсвязную очередь. Ведь по сути каждый блок памяти имеет указатель на соседей?
по сравнению с односвязным? Можно от любого узла дойти до любого, в односвязном если нужен один из предыдущих, придется каждый раз идти сначала
В односвязном списке можно получить за O(1) только следующий элемент. В двусвязном - и следующий, и предыдущий.
Каждый блок памяти НЕ имеет указатель на соседей
В С++ список двусвязный по умолчанию, так что не понятно, почему возник такой вопрос.
std::list двухсвязный ведь вот и здал такой вопрос
У очереди надо иметь возможность поставить В КОНЕЦ очереди, и взять ИЗ НАЧАЛА, уже двусвязность нужна. Либо - особая организация односвязного списка (который должен быть уже не общеупотребимым списком)
Очередь - это же адаптер. Если внутри хранить указатель на начальную ноду и на конечную, то вполне себе можно и односвязным списком обойтись под капотом, разве нет?
Да можно но где ты возьмёшь эти указатели на начальную и конечную ноду? Тебе надо тогда брать и писать новый список которые сохраняет указатель как на голову так и на хвост
так а зачем список-то как-то трогать? На головную ноду указатель вернет begin(), а на хвост будем сохранять при добавлении очередного элемента в конец
Ну а сам список ты будешь как-то инкапсулировать защищать методами реализовывать все методы основного списка? Конечно можно так сделать Да но это будет новый класс
и получится тормозной велосипед, не надо тащить list без строгой необходимости
Обсуждают сегодня