Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2015, 21:54   #1
Obey177
Форумчанин
 
Регистрация: 29.08.2010
Сообщений: 159
По умолчанию Списки и непонятность списков

Кто нибудь может дать ссылки на литературу где описаны списки, проблема в том что реализовал односвязный циклический список на С++ захотел попробовать сделать это на C# но увы информации ноль понял что указатели не нужны, так как все таки реализовать? если есть несколько параметров допустим (улица,дом,номер) с помощью того же ArrayList?
Obey177 вне форума Ответить с цитированием
Старый 10.01.2015, 22:07   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
захотел попробовать сделать это на C# но увы информации ноль
Я бы не сказал: http://msdn.microsoft.com/ru-ru/libr...vs.110%29.aspx
Цитата:
если есть несколько параметров допустим (улица,дом,номер) с помощью того же ArrayList?
http://www.programmersforum.ru/showthread.php?t=189445
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.01.2015, 22:10   #3
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

В стандартной библиотеке C# связный список является обощенным классом, т.е. в терминах С++ - шаблонным. Его вы создаете как
Код:
var list = new LinkedList<T>();
где T - любой тип, какой нужно. Вам нужно сделать что-то похожее. Ваши параметры (улица,дом,номер) просто описываете в отдельном классе, не имеющем отношения к списку.
Код:
class MyData
{
public string Street;
public int House; ...
}
Сам список делаете generic классом.
Код:
class List<T>
{
...
}
Насчет "указатели не нужны". По сути в С# все переменные типа "объект" являются ссылками (нет возможности создать объект в стеке как в С++). Так что можете считать это аналогией указателей, если удобно.
В С++ варианте у вас наверняка было что-то вроде
Код:
struct Node
{
...//параметры объекта, судя по тому как вы написали в вопросе
Node *next;
}
Тут будет что-то вроде
Код:
class List<T>
{
//внутренний класс, связанный с тем же типом T
class Node
{
public T Value;//значение, которое будет вашим классом данных при T=MyData
public Node Next;//это ссылка на следующий узел
}
...
}
Удалять объекты в C# не нужно (по крайней мере такие простые как эти), так что delete не нужно, достаточно, чтобы все ссылки на объект были занулены или потеряны,и его удалит сборщик мусора.

А вообще, я уверен, что примеров связных списков на шарпе великое множество.
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 10.01.2015, 22:58   #4
Obey177
Форумчанин
 
Регистрация: 29.08.2010
Сообщений: 159
По умолчанию

Код:
    class MyData
        {
        public string Street;
        public int House;
        }
    class List<T>
        {
        class Node
        {
        public T Value;//значение, которое будет вашим классом данных при T=MyData
        public Node Next;//это ссылка на следующий узел
        }
        public void Add();
        }
    class Program
    {
        static void Main(string[] args)
        {
            List<MyData> book=new List<MyData>();
            book.Add();
        }
    }
С указателем на первый и последний элемент тоже самое? Или как его здесь описать, + у Add должны быть параметры как с ними быть?
Obey177 вне форума Ответить с цитированием
Старый 10.01.2015, 23:11   #5
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Дальше всё нужно просто переводить с С++, в зависимости от того как вы это написали. У add должен быть параметр типа T - значение, добавляемое в список.
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 10.01.2015, 23:23   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Вы что сделать хотите? Свой связный список написать? Зачем? В .NET уже есть LinkedList. И просто List.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 10.01.2015, 23:40   #7
Obey177
Форумчанин
 
Регистрация: 29.08.2010
Сообщений: 159
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Вы что сделать хотите? Свой связный список написать? Зачем? В .NET уже есть LinkedList. И просто List.
И где в List взять Next?
Код:
static void Main(string[] args)
        {
            List<MyData> book = new List<MyData>;
            book.Add(new MyData
            {
                Street="olol",
                House=1
            });
            book.Add(new MyData
            {
                Street="olol",
                House=2
            });
            book.Add(new MyData
            {
                Street="olol",
                House=3
            });
            while(book!=null;book=book.Next)
        }
такая конструкция не работает с List как сделать без велосипеда что бы работало?

Последний раз редактировалось Obey177; 10.01.2015 в 23:43.
Obey177 вне форума Ответить с цитированием
Старый 10.01.2015, 23:50   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А цель-то какая вообще? Что вы сделать хотите?
Я тут вижу только обход элементов списка, для этого не нужен связный список.

А Next есть в LinkedList (точнее в LinkedListNode).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 10.01.2015, 23:55   #9
Obey177
Форумчанин
 
Регистрация: 29.08.2010
Сообщений: 159
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
А цель-то какая вообще? Что вы сделать хотите?
Я тут вижу только обход элементов списка, для этого не нужен связный список.

А Next есть в LinkedList (точнее в LinkedListNode).
Задание написать кольцевой односвязный список, алгоритм быстрого поиска и сортировки
Obey177 вне форума Ответить с цитированием
Старый 10.01.2015, 23:58   #10
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Дык задача и состоит в самой реализации списка? Это учебная задача?
Или просто нужно для какой-то другой задачи это? В .NET же реализованы и списки (правда кольцевого нет), и сортировка.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка списков dimafe6 Общие вопросы C/C++ 0 08.11.2012 02:17
обрабатывание списков Алёнька Помощь студентам 0 20.12.2011 09:08
сведение списков Юло Microsoft Office Excel 7 26.05.2011 13:34
Слияние списков Rom@shka Общие вопросы C/C++ 5 07.05.2009 20:24