示例#1
0
 public static _2List operator +(Element e1, _2List l2)
 {
     if (e1 == null && l2 == null)
     {
         return(null);
     }
     else
     {
         if (e1 == null || l2 == null)
         {
             if (e1 == null)
             {
                 return(l2);
             }
             else
             {
                 return(new _2List(e1.Value));
             }
         }
         else
         {
             _2List  tmp  = new _2List(e1.Value);
             Element tmpE = l2.head;
             while (tmpE != null)
             {
                 tmp.Add(tmpE.Value);
                 tmpE = tmpE.Next;
             }
             return(tmp);
         }
     }
 }
示例#2
0
 public static _2List operator +(_2List l1, _2List l2)
 {
     if (l1 == null && l2 == null)
     {
         return(null);
     }
     if (l1 == null || l2 == null)
     {
         if (l1 == null)
         {
             return(l2);
         }
         else
         {
             return(l1);
         }
     }
     else
     {
         _2List  tmp  = l1;
         Element tmpE = l2.head;
         while (tmpE != null)
         {
             tmp.Add(tmpE.Value);
             tmpE = tmpE.Next;
         }
         return(tmp);
     }
 }
示例#3
0
 public static _2List operator +(Element e1, Element e2)
 {
     if (e1 == null && e2 == null)
     {
         return(null);
     }
     else
     {
         if (e1 == null || e2 == null)
         {
             if (e1 == null)
             {
                 return(new _2List(e2.Value));
             }
             else
             {
                 return(new _2List(e1.Value));
             }
         }
         else
         {
             _2List tmp = new _2List(e1.Value); tmp.Add(e2.Value); return(tmp);
         }
     }
 }
示例#4
0
        static _2List Merge(_2List arr1, _2List arr2)          // слияние списков
        {
            int    ptr1 = 0, ptr2 = 0;                         //индексы узлов в списке 1 и 2 соответствено
            _2List tmp = null;

            for (int i = 0; i < arr1.Count + arr2.Count; i++)   // цикл для перебора всех узлов списка 1 и 2
            {
                if (ptr1 < arr1.Count && ptr2 < arr2.Count)     // если еще не перебрали 1 и 2 списки полностью
                {
                    if (arr1.GetElement(ptr1) > arr2.GetElement(ptr2))
                    {
                        tmp += arr2.GetElement(ptr2++);
                    }
                    else
                    {
                        tmp += arr1.GetElement(ptr1++);
                    }
                }
                else                                            // если один из списков пуст
                {
                    if (ptr2 < arr2.Count)
                    {
                        tmp += arr2.GetElement(ptr2++);
                    }
                    else
                    {
                        tmp += arr1.GetElement(ptr1++);
                    }
                }
            }

            return(tmp);                                         //возвращаем отсортированный, слитый список
        }
示例#5
0
        static void Main(string[] args)
        {
            _2List list = null;

            string s;                                               // строка для сбора информации из консоли

            Console.WriteLine("Напиши stop, чтобы закончить заполнение списка");
            do
            {
                Console.Write("Введи число: ");
                s = Console.ReadLine();                             // запоминаем то что ввели в консоли
                double value;
                if (double.TryParse(s, out value))                  // проверяем что мы ввели в консоли, если соответствует типа double то передаем значение в переменную value и добавляем в наш список
                {
                    list = (list == null) ? new _2List(value) : list + new Element(value);
                }
            }while (s.IndexOf("stop") < 0 && s.IndexOf("test") < 0);
            if (s.IndexOf("test") >= 0)
            {
                list = TestList();
            }
            Console.WriteLine(_2List.PrintConsole(list));
            _2List listSort = MergeSort(list);

            Console.WriteLine(_2List.PrintConsole(listSort));
            Console.ReadKey();
        }
示例#6
0
        static _2List MergeSort(_2List list)                        // сортировка слиянием
        {
            if (list.Count == 1)
            {
                return(list);
            }

            int middle = list.Count / 2;                                                      // находим середину списка

            return(Merge(MergeSort(list.Remove(middle)), MergeSort(list.Remove(0, middle)))); //возвращаем новый отсортированный список(сортируем через рекурсию)
        }
示例#7
0
        public static string PrintConsole(_2List list)
        {
            string  s   = "";
            Element tmp = list.head;

            while (tmp != null)
            {
                s  += tmp.Value + " ";
                tmp = tmp.Next;
            }
            return(s);
        }
示例#8
0
        static _2List TestList()
        {
            _2List list = new _2List(10.123);

            list.Add(13.123);
            list.Add(100.222);
            list.Add(3.34);
            list.Add(4.453);
            list.Add(18.5);
            list.Add(6.456);
            list.Add(9.547);
            list.Add(18.78);
            list.Add(9.456);
            list.Add(100.8);
            list.Add(14.67);
            list.Add(0.223);
            return(list);
        }
示例#9
0
        /// <summary>
        /// возвращает новый список, в котором с указанной позиции index было удалено указанное кол-во елементов val.
        /// </summary>
        /// <param name="index"></param>
        /// <param name="val"></param>
        /// <returns></returns>
        public _2List Remove(int index, int val)
        {
            _2List  tmpLeft  = this.Remove(index);
            Element tmpRight = this.GetElement(index + val);

            while (tmpRight != null)
            {
                if (tmpLeft == null)
                {
                    tmpLeft = new _2List(tmpRight.Value);
                }
                else
                {
                    tmpLeft.Add(tmpRight.Value);
                }
                tmpRight = tmpRight.Next;
            }
            return(tmpLeft);
        }
示例#10
0
 /// <summary>
 /// Возврощает новый список, в котором с указанной позиции были удалены элементы.
 /// </summary>
 /// <param name="index"></param>
 /// <returns></returns>
 public _2List Remove(int index)
 {
     if (index > 0 && index < Count)
     {
         _2List  New = new _2List(head.Value);
         Element tmp = new Element();
         tmp = head.Next;
         while (index > 1)
         {
             New.Add(tmp.Value);
             tmp = tmp.Next;
             index--;
         }
         return(New);
     }
     else
     {
         return(null);
     }
 }
示例#11
0
 public static _2List operator +(_2List l1, Element e2)
 {
     if (l1 == null && e2 == null)
     {
         return(null);
     }
     else
     {
         if (l1 == null || e2 == null)
         {
             if (l1 == null)
             {
                 return(new _2List(e2.Value));
             }
             else
             {
                 _2List  tmp  = new _2List(l1.head.Value);
                 Element tmpE = l1.head.Next;
                 while (tmpE != null)
                 {
                     tmp.Add(tmpE.Value);
                     tmpE = tmpE.Next;
                 }
                 return(tmp);
             }
         }
         else
         {
             _2List  tmp  = new _2List(l1.head.Value);
             Element tmpE = l1.head.Next;
             while (tmpE != null)
             {
                 tmp.Add(tmpE.Value);
                 tmpE = tmpE.Next;
             }
             tmp.Add(e2.Value);
             return(tmp);
         }
     }
 }