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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамические списки. Реализация. 
:(
    Опции темы
NeoN2k
Дата 20.9.2009, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго времени, ребят)
Изучал Pascal и Си в универе... Сейчас встал вопрос о том, на каком языке буду оставшееся свое время писать... Решил перейти на С-подобный язык. Выбрал C#.
Такой вопрос к вам.
Не могу разобраться, как использовать динамические списки в шарпе.
Вот, допустим, на Си этот кусок кода работает:
Код

struct my_type
{
    int data;
    my_type *next;
    my_type(int temp)
    {
        data = temp;
    }
};
//---------------------
int main(void)
{
    my_type *head;
    // создание динамического списка
    my_type *now = new my_type(0);
    head = now;
    for(int i = 1; i < 10; i++)
    {
        my_type *element = new my_type(i);
        now->next = element;
        now = element;
    }
    now->next = 0;
    // обход списка
    now = head;
    while(now != 0)
    {
        printf("%i\n",now->data);
        now = now->next;
    }
    getch();
    return 0;
}


Пытаюсь подобное сделать в Шарпе, учитывая ООП, но не получается никак. Во-первых тот же самый my_type *element = new my_type(i);... Звездочку перед element он видеть не хочет)) Ну и в остальном коде свои непонятки...
Искал здесь, не нашел)
Скажите, пожалуйста, или источник нужного мне материала, или ответьте на вопрос) Благодарю)
PM MAIL   Вверх
Heinzz
Дата 20.9.2009, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 5
Всего: 9



Код


static void Main(string[] args)
        {
            LList<string> llist = new LList<string>("first");
            llist.AddLast("second");
            llist.AddLast("third");
            Node<string> n = llist.first;

            while (true)
            {
                Console.WriteLine(n.value);
                
                n = n.next;
                if (n == null) { break; }
                
            }
            Console.ReadKey();
            
        }
 class LList<T>
    {
        public Node<T> first;
        public Node<T> last;

        public LList(T _value)
        {
            first = new Node<T>(_value);
            last = first;
        }
        public void AddLast(T _val)
        {
            Node<T> my = new Node<T>(_val);
            last.next = my;
            last = my;
        }
        public void ToConsole()
        {
            Node<T> node = new Node<T>();
            node = first;
            while (node.next != null)
            {
                Console.WriteLine(node.value);
                node = node.next;
            }
            Console.WriteLine(last.value);
        }
        public void Delete(T _val)
        {
            Node<T> node = new Node<T>();
            Node<T> prev = new Node<T>();
            node = first;
            while (node.next != null)
            {
                if ((object)node.value == (object)_val)
                {
                    prev.next = node.next;
                }
                prev = node;
                node = node.next;
            }
        }
    }

    class Node<T>
    {
        public Node<T> next;
        public T value;
        public Node(T _val)
        { value = _val; }
        public Node() { }
    }



это самописный, а вообще смотрите List<>



--------------------
user posted image
PM MAIL   Вверх
NeoN2k
Дата 20.9.2009, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Благодарю, но неужели код в 2 раза больше должен быть? ))
И сложноват на восприятие мне)) Если это то, что мне нужно, то не могли бы Вы комментарии оставить?
PM MAIL   Вверх
Heinzz
Дата 20.9.2009, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 5
Всего: 9





Цитата(NeoN2k @  20.9.2009,  12:55 Найти цитируемый пост)
Благодарю, но неужели код в 2 раза больше должен быть? ))


не больше, просто в приведенном примере реализовано удаление узла и вывод всего списка на консоль

зы а кроме как в познавательных целях вручную делать особо смысла нет. Используйте готовые компоненты:

Код

List<string> list = new List<string>();
            list.Add("first");
            list.Add("second");
            list.Add("third");

            foreach (string s in list)
            {
                Console.WriteLine(s);
            }





--------------------
user posted image
PM MAIL   Вверх
NeoN2k
Дата 20.9.2009, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Именно в познавательных) В универе лабы надо писать)) А я то выбрал шарп) Теперь мучаюсь с переходом на него)
Спс за инфу)
PM MAIL   Вверх
NeoN2k
Дата 24.9.2009, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я извиняюсь, но не могли бы Вы прокомментировать данный код?...
Я не до конца синтаксис понял...
Также не понимаю назначение <T> или <string>...
PM MAIL   Вверх
Ram1reS
Дата 24.9.2009, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

Репутация: 3
Всего: 5



Читайте про generics.
--------------------
 
PM MAIL ICQ   Вверх
Heinzz
Дата 24.9.2009, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 5
Всего: 9



грубо говоря это указание типа объектов содержащихся в коллекции. при описании классов написано  <Т> - то-есть тип пока не известен и эта буква его заменяет. (грубо переменная содержащая тип), где написано <string> - это уже мы создали коллекцию типа именно string. Строгая типизация снижает вероятность ошибок при всяких парсингах ,+ дженерики(такие коллекции,...) работают быстрее поскольку не производят боксинг/анбоксинг (приведение типов object-T-object).


--------------------
user posted image
PM MAIL   Вверх
Partizan
Дата 24.9.2009, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



нечто аналогичное шаблонам С++


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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