2124
правки
[
''#
public void Push('''T''' value) <span style="color:red">#быстрая операция</span>
public '''T''' Pop() <span style="color:red">#быстрая операция</span>
<---or--->
''#
public void AddFirst('''T''' value) <span style="color:red">#быстрая операция</span>
public void AddLast('''T''' value) <span style="color:red">#требуется ссылка на хвост списка для того, чтобы операция была максимально быстрой</span>
==Операции над стеком - частным случаем односвязного списка==
===Push===
Пусть '''TNode<T>''' node - новый узел стека
var node = new TNode<'''T'''>(value,
===Pop===
Пусть '''T''' result - значение удаляемого узла стека
if (
error
==Операции над односвязным списком - общий случай==
===Добавление в начало - AddFirst===
Пусть '''TNode<T>''' node - новый узел списка
var node = new TNode<'''T'''>(value,
[[File:AddFirstMethod.jpg|frameless|400px]]
===Добавление в конец - AddLast===
Пусть '''TNode<T>''' node - новый узел списка
var node = new TNode<'''T'''>(value)
if (
else
Общий случай (множество узлов перед last не является пустым):
[[File:AddLastMethod.jpg|frameless|400px]]
===Вставка после целевого узла - InsertAfter===
Пусть '''TNode<T>''' node - новый узел списка
if (
error
var node = new TNode<'''T'''>(value, target.'''Next''')
target.'''Next''' = node
Предполагается, что target существует, иначе - ошибка.
===Вставка перед целевым узлом - InsertBefor===
Пусть '''TNode<T>''' node - новый узел списка
if (
error
var node = new TNode<'''T'''>(value,
if (
else
{
ancillary.'''Next''' = node
}
Предполагается, что target существует, иначе - ошибка.
===Удаление первого узла - RemoveFirst===
if (
error
[[File:RemoveFirstMethod.jpg|frameless|400px]]
===Удаление последнего узла - RemoveLast===
Пусть '''TNode<T>''' predLast - предпоследний узел списка
if (
error
if (
else
Общий случай (множество узлов перед последним не является пустым):
===Удаление после целевого узла - RemoveAfter===
Пусть '''TNode<T>''' target - узел списка
if (
error
target.'''Next''' = target.Next.'''Next'''
Предполагается, что target существует, иначе - ошибка.
===Удаление целевого узла - Remove===
Пусть '''TNode<T>''' target - узел списка
if (
error
if (node.'''Value''' ==
else
target.'''Next''' = target.Next.'''Next'''
Предполагается, что node существует, иначе - ошибка.
==Операции над двусвязным списком - общий случай==
===Добавление в начало - AddFirst===
Пусть '''TNode<T>''' node - новый узел списка
var node = new TNode<'''T'''>(value,
if (
[[File:AddFirstMethod2.jpg|frameless|400px]]
===Добавление в конец - AddLast===
Пусть '''TNode<T>''' node - новый узел списка
var node = new TNode<'''T'''>(value)
if (
else
node.'''Previous''' =
===Вставка после целевого узла - InsertAfter===
Пусть '''TNode<T>''' node - новый узел списка
if (
error
var node = new TNode<'''T'''>(value, target.'''Next''', target)
if (node.'''Next''' != null) then
node.Next.'''Previous''' = node
Предполагается, что target существует, иначе - ошибка.
===Вставка перед целевым узлом - InsertBefor===
Пусть '''TNode<T>''' node - новый узел списка
if (
error
var node = new TNode<'''T'''>(value,
if (
{
else
{
target.'''Previous''' = node
}
Предполагается, что target существует, иначе - ошибка.
===Удаление первого узла - RemoveFirst===
if (
error
if (
===Удаление последнего узла - RemoveLast===
Пусть '''TNode<T>''' predLast - предпоследний узел списка
if (
error
if (
else
===Удаление после целевого узла - RemoveAfter===
Пусть '''TNode<T>''' target - узел списка
if (
error
target.'''Next''' = target.Next.'''Next'''
if (target.'''Next''' != null) then
target.Next.'''Previous''' = target
===Удаление целевого узла - Remove===
Пусть '''TNode<T>''' target - узел списка
if (
error
if (node.'''Value''' ==
if (
else
target.'''Next''' = target.Next.'''Next'''
if (target.'''Next''' != null) then
target.Next.'''Previous''' = target
''Пояснение: если удаляемый элемент - это голова списка, то переместить голову списка на один узел вперёд; если список еще содержит элементы, то убрать ссылку на предыдущий элемент для текущей головы списка; если удаляемый узел - не голова, то убрать связь с удаляемым элементом; если удаляемый элемент не был последним, то установить ссылку Previous на предыдущий узел предыдущего узла.''
=Вывод списков=
==Вывод ациклического списка - Print==
Пусть '''string''' delimiter - разделитель между выводимыми значениями списка
node =
while (node != null)
{
|
правки