Изменения

Перейти к: навигация, поиск

Очередь Майкла и Скотта

52 байта убрано, 17:46, 1 октября 2018
Структура очереди
Очередь моделируется с помощью односвязного списка. Каждый элемент списка (<tex>Node</tex>) содержит ссылку на хранимые в нём данные и указатель на следующий элемент списка (который можно менять атомарно).
'''case class''' Node<'''T'''>('''val''' data: '''TInt''', '''val''' next: AtomicReference<Node<'''T'''>>)
Если узел <tex>node</tex> является последним в списке, то его <tex>next</tex> указывает на <tex>null</tex>.
Узел списка, на который указывает <tex>H</tex>, является фиктивным (''dummy''). Данные, хранимые в этом узле, не имеют значения. Изначально очередь состоит из одного ''dummy''-элемента, на который указывают <tex>T</tex> и <tex>H</tex>.
'''class''' Queue<'''T'''> dummy = new Node<'''T'''>(null, new AtomicReference<Node>(null)) head = new AtomicReference<Node<'''T'''>>(dummy) tail = new AtomicReference<Node<'''T'''>>(dummy)
// TODO; картинка
Анонимный участник

Навигация