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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2017, 23:22   #1
Лакира
Пользователь
 
Регистрация: 17.11.2016
Сообщений: 28
По умолчанию C#. Работа с списками

Не могу понять, как работать со списками одномерными.Как написать адекватный индексатор?


Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace L_2
{

    class LinkedListVector
    {

        class Node
        {
             private double a = 0;
             private Node next = null;  

             public double A
             {
                 get;
                 set;
             }
             public Node Next
             {
                 get;
                 set;
             }

             public Node(double a, Node next)
             {
                 Next = next;
                 A = a;
             }
             public Node()
             {
             }
        }


        private Node first;
        private Node last;

        public LinkedListVector(int a)
        {
            Node tec = new Node();
            if (first != null)
            {
                for (int i = 0; i < a; i++)
                {
                    tec.Next = last;
                    last = tec;
                }
            }
        }
       

        public double this[int i]
        {
            
            get
            {
                
                if (i == 0)
                {
                    Node tec = new Node();
                    first = last = tec;
                    tec =first.Next ;
                    return tec.A;
                }
                else
                {
                    Node tec = new Node();
                    last.Next = tec;
                    last = tec;
                    return tec.A;

                }
            }
            set
            {
                
                last.Next = tec;
                last = tec;
                value = tec.A;
               
                
            }
        }

        public void Print()
        {
            Node tec = first;
            while (tec != null)
            {
                Console.Write("\t" + tec.A);
                tec = tec.Next;
            }
        }

        

    }
}
Лакира вне форума Ответить с цитированием
Старый 08.03.2017, 00:26   #2
Лакира
Пользователь
 
Регистрация: 17.11.2016
Сообщений: 28
По умолчанию

Вот 2 вариант:
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace L_2
{

    class LinkedListVector
    {

        class Node
        {
           

             public double A
             {
                 get;
                 set;
             }
             public Node Next
             {
                 get;
                 set;
             }

             public Node(double a, Node next)
             {
                 Next = next;
                 A = a;
             }
            public Node ()
            {
                }
        }


        private Node first;
        private Node last;

        public LinkedListVector(int a)
        {
            Node tec = new Node();
            if (first != null)
            {
                for (int i = 0; i < a; i++)
                {
                    tec.Next = last;
                    last = tec;
                }
            }
        }
       

        public double this[int i]
        {
            
            get
            {
                    Node tec = new Node();
                    if(tec.Next!=null)
                    
                    tec.Next = tec;
                    return tec.A;
                
                }
                set
                {
                    Node tec = new Node();
                    if (tec.Next != null)

                    tec.Next = tec;
                    value= tec.A;
                }
                
            }
          
        public void Print()
        {
            Node tec = first;
            while (tec!= null)
            {
                Console.Write("\t" + tec.A);
                tec =tec.Next ;
            }
        }

        

    }
}
Лакира вне форума Ответить с цитированием
Старый 08.03.2017, 11:32   #3
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Цитата:
Сообщение от Лакира Посмотреть сообщение
Код:
public LinkedListVector(int a)
        { .... if (first != null) ....
Вот это условие лишнее. И да, ты в конструкторе не инициализируешь first, а это плохо.
Тебе там не нужен tec, для заполнения стоит юзануть first. Как-то так.
Код:
for(int i = 0; i< a;++i)
{
   first = new Node(0, first);
}
Для индексации надо так или иначе перейти к i элементу. А значит там должен быть цикл, а у тебя ничего.
Держи. Переход к i узлу вынес в отдельный метод.
Код:
private Node getNodeByIndex(int index)
{
   Node iterator = first;
   if(0>=index)
            throw new System.ArgumentOutOfRangeException("Index out of Range");
   if(null==iterator)
       throw new System.ArgumentOutOfRangeException("Tried to index empty list");
   for(int i = 0; i<index;++i)
   {
      if(null==iterator.Next)
            throw new System.ArgumentOutOfRangeException("Index out of Range");
      iterator = iterator.Next;
   }
   return iterator;
}

public double this[int i]
{
            get { return getNodeByIndex(i).A;}
            set{ getNodeByIndex(i).A = value;}
}
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 08.03.2017, 17:16   #4
Лакира
Пользователь
 
Регистрация: 17.11.2016
Сообщений: 28
По умолчанию

Cпасибо огромное. Подскажите, что происходит во второй строчке кода
Код:
for(int i = 0; i< a;++i)
{
   first = new Node(0, first);
}
Лакира вне форума Ответить с цитированием
Старый 08.03.2017, 17:18   #5
Лакира
Пользователь
 
Регистрация: 17.11.2016
Сообщений: 28
По умолчанию

Почему именно передается значение 0?
Лакира вне форума Ответить с цитированием
Старый 08.03.2017, 21:32   #6
Лакира
Пользователь
 
Регистрация: 17.11.2016
Сообщений: 28
По умолчанию

Я поняла зачем.Спасибо
Лакира вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со списками Anastasea_ Помощь студентам 0 12.02.2017 22:57
Работа со списками Ти6ка Общие вопросы C/C++ 0 22.04.2015 18:50
Работа со списками puzik_off Фриланс 8 30.12.2009 12:02
Работа со списками. radist Паскаль, Turbo Pascal, PascalABC.NET 4 07.05.2007 00:05