Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамич структуры, указатели в С#, Динамич структуры, указатели в С# 
:(
    Опции темы
GRIENDERS
Дата 15.5.2007, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 19.2.2007

Репутация: нет
Всего: 1



В управляемом С++ есть вот такая фишка для создания бинарных деревьев, очередей, узлов и прочей лабуды


Код

struct Node
{
public:
    int value;
    Node* left;
    Node* right;
    Node(int value, Node* left, Node* right)
    {
        this->value = value;
        this->left = left;
        this->right = right;
    }
};


или так


   
Код

 Node *MainForm::search_insert(Node *Root, int val)
        {
            Node* pv = Root, *prev;
            bool found = false;
            while(pv && !found)
            {
                prev = pv;
                if (val == pv->value) found = true;
                else if (val < pv->value) pv = pv->left;
                else pv = pv->right;
            }
            if (found) return pv;
            Node* pnew = new Node(val, 0, 0);
            if (val < prev->value)
                prev->left = pnew;
            else
                prev->right = pnew;
            return pnew;
        }


или вот так


    
Код

void MainForm::DeleteTreeNode(const int &item)
    {
        Node *DNodePtr,
             *PNodePtr,
             *RNodePtr;
        if ((DNodePtr = FindNode(item,PNodePtr))==0)
        {
            return;
        }
        if (DNodePtr->right == 0)
            RNodePtr = DNodePtr->left;
        else if (DNodePtr->left == 0)
            RNodePtr = DNodePtr->right;
        else
        {
            Node *PofRNodePtr = DNodePtr;
            RNodePtr = DNodePtr->left;
            while (RNodePtr->right)
            {
                PofRNodePtr = RNodePtr;
                RNodePtr = RNodePtr->right;
            }
            if (PofRNodePtr == DNodePtr)
                RNodePtr->right = DNodePtr->right;
            else 
                PofRNodePtr->right = RNodePtr->left;
        }
        if (RNodePtr == 0)
            Root = RNodePtr;
        else if (DNodePtr->value < 
            PNodePtr->value)
            PNodePtr->left= RNodePtr;
        else PNodePtr->right = RNodePtr;
            delete DNodePtr;
    }


И в том же дуже...
Как это переделать на C#? Особенно 1-ый код.
PM MAIL   Вверх
Void
Дата 15.5.2007, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 25
Всего: 173



Код
class Node
{
    public int value;
    
    public Node left, right;
    
    public Node(int value, Node left, Node right)
    {
        this.value = value;
        this.left = left;
        this.right = right;
    }
}

В данном контексте можно спокойно приравнять указатели C++ и ссылки в C#. Любой класс в C#, напомню, является ссылочным типом.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
GRIENDERS
Дата 15.5.2007, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 19.2.2007

Репутация: нет
Всего: 1



А почему это не работает?
 
Код

struct Node
    {
        public int value;

        public Node left, right;

        public Node(int value, Node left, Node right)
        {
            this.value = value;
            this.left = left;
            this.right = right;
        }
    }

PM MAIL   Вверх
archeg
Дата 15.5.2007, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 6.1.2007
Где: Киев

Репутация: 11
Всего: 27



Цитата(GRIENDERS)

А почему это не работает?

Код


struct Node
    {
        public int value;

        public Node left, right;

        public Node(int value, Node left, Node right)
        {
            this.value = value;
            this.left = left;
            this.right = right;
        }
    }



Цитата(Void @  15.5.2007,  19:30 Найти цитируемый пост)
Любой класс в C#, напомню, является ссылочным типом. 

Класс, но не структура. struct  - valuable тип а не reference

Впрочем в С# есть очень много класов - списки, очередя, словари, и самому писать их необязательно (List<>, Queue<>, Dictionary<> и др ....)

Это сообщение отредактировал(а) archeg - 15.5.2007, 21:36


--------------------
ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru)

Дядька всегда можно спросить в аське, если не задалбывать - не откажет smile
И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои  ;)
PM MAIL ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0691 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.