Введенный вами код C
использует ключевое слово register
, чтобы попытаться принудительно настроить определенную оптимизацию на компиляторе. Это ничего не меняет о том, как работает код, а только о том, как компилятор генерирует машинный код, который в конечном итоге будет работать на процессоре.
Реальность заключается в том, что этот вид подсказки компилятора в большинстве случаев не нужен современным компиляторам и может фактически снизить эффективность выходного кода, поскольку он жонглирует, чтобы попытаться удовлетворить ваши требования о сохранении определенной части информации на процессоре , Оптимизаторы достаточно умны в эти дни, чтобы понять, что нужно и не нужно, чтобы быть на процессоре, мы можем доверять им, что в большинстве случаев.
Что касается C#
, хотя ... нет совместимой концепции. Также нет безопасных указателей, поэтому вам придется избавиться от них. Просто используйте ссылки вместо этого, они работают найти для связанных списков.
Попробуйте это: пример
public class LinkedList<T>
where T : IComparable<T>
{
public class Node
{
public Node link;
public T value;
}
public Node root = null;
public bool InsertValue(T value)
{
return InsertNode(new Node { value = value });
}
public bool InsertNode(Node inserted_node)
{
if (root == null)
{
root = inserted_node;
return true;
}
Node prev = null;
Node current = root;
while (current != null && current.value.CompareTo(inserted_node.value) > 0)
{
prev = current;
current = current.link;
}
prev.link = inserted_node;
inserted_node.link = current;
return false;
}
}
Использования:
void Main()
{
var list = new LinkedList<int>();
list.InsertValue(5);
list.InsertValue(2);
list.InsertValue(3);
for (var c = list.root; c != null; c = c.link)
Console.WriteLine(c.value);
}
Конечно, вы могли бы просто использовать встроенный ИНТ [ 'LinkedList класса'] (https://msdn.microsoft.com /en-us/library/he2s3bh7.aspx). –
@LucasTrzesniewski Да, но поучительно иногда создавать собственные версии этих вещей. Знание того, как это работает, действительно полезно :) – Corey
Конечно, я давал подсказку, на всякий случай. Я думаю, что код C++ мог быть написан с помощью ['std :: list'] (http://en.cppreference.com/w/cpp/container/list). :) –