связанный список и красное / черное дерево в c # - проблема со ссылками? - PullRequest
0 голосов
/ 24 февраля 2010

Я довольно новичок в c # и пытаюсь понять что-то довольно простое.

Я хочу реализовать RBTree и связанный список, поэтому я создаю:

public class RBTreeNode
{
        // PROPERTIES
        public RBTreeNode left;
        public RBTreeNode right;
        public RBTreeNode parent;
        public String Color;
        public Int Key;
} 

List<RBTreeNode> deleteList = new List<RBTreeNode>();

Во время работы моей программы я выполняю итерацию по дереву, беря некоторые узлы (в зависимости от значения) и добавляя их в deleteList.

вещь, на которую я не могу настроиться, это если, например, у меня есть RBTreeNode X, и я делаю X.left = null. то, что я хочу, это обнулить левого дочернего элемента X (не затрагивая X.left RBTreeNode, но я думаю, что здесь произойдет, что X.left действительно станет нулевым, но объект X.left RBTreeNode также станет нулевым. не то, что я хочу. (если он скопирован в deleteList, он станет нулевым, что неправильно)

Я хочу быть в состоянии сделать то же самое, что и с c ++, используя указатели. В C ++ я мог бы сделать это так:

public class RBTreeNode
{
        // PROPERTIES
        public RBTreeNode* left;
        public RBTreeNode* right;
        public RBTreeNode* parent;
        public std::string Color;
        public int Key;
} 

Например:

RBTreeNode* tenp = X->left;
X->left = null; //(i think in c# it will turn temp here to null to - of course without   pointers)
temp->right = &X;

Какие-либо советы / объяснения?

Ответы [ 2 ]

2 голосов
/ 24 февраля 2010

Нет, ты в порядке. X.left это просто переменная. Установка его в null просто устанавливает значение этой переменной в null, это никак не влияет на объект, на который он ссылался.

Нет такого понятия, как установка объекта на ноль в C #.

У меня есть статья о значениях и ссылочных типах в C # , которые вы можете найти полезными.

0 голосов
/ 24 февраля 2010

свойства являются ссылками, поэтому базовое содержимое не будет изменено. Вы можете поменять местами, используя временную переменную, аналогичную версии c ++ (конечно, без указателей).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...