예제 #1
0
 //16. Рекурсивний метод видалення n-ного за рахунком елемента;
 public void DeleteAtRec(int pos, RList rl)
 {
     //проверка
     if (pos < 1 || pos > Counter(rl))
     {
         throw new Exception("Введенная позиция меньше 1 или больше кол-ва элементов листа");
     }
     //последний элемент
     if (pos == Counter(rl))
     {
         while (rl.next.next != null)
         {
             rl = rl.next;
         }
         rl.next = null;
         return;
     }
     //первый элемент
     if (pos == 1)
     {
         while (rl.next.next != null)
         {
             rl.data = rl.next.data;
             rl      = rl.next;
         }
         rl.data = rl.next.data;
         rl.next = null;
     }
     else
     {
         pos--;
         DeleteAtRec(pos, rl.next);
     }
 }
예제 #2
0
 //8. Рекурсивний метод додавання нового елемента n-ним у список;
 public void AddAtRec(int pos, int num, RList rl)
 {
     if (pos < 1 || pos > Counter(rl))
     {
         throw new Exception("Введенная позиция меньше 1 или больше кол-ва элементов листа");
     }
     if (pos == Counter(rl))
     {
         while (rl.next != null)
         {
             rl = rl.next;
         }
         rl.next = new RList(num);
         return;
     }
     if (pos == 1)
     {
         int temp = rl.data;
         rl.data = num;
         RList lel = new RList(temp);
         lel.next = rl.next;
         rl.next  = lel;
     }
     else
     {
         pos--;
         AddAtRec(pos, num, rl.next);
     }
 }
예제 #3
0
 public static void deleteEl(RList rl)
 {
     while (rl.next.next != null)
     {
         rl.data = rl.next.data;
         rl      = rl.next;
     }
     rl.data = rl.next.data;
     rl.next = null;
 }
예제 #4
0
        //подсчет кол-ва элементов в листе
        public static int Counter(RList rl)
        {
            int count = 1;

            while (rl.next != null)
            {
                count++;
                rl = rl.next;
            }
            return(count);
        }
예제 #5
0
 //40. Метод пошуку елемента із заданим значенням(результат - посилання на знайдений елемент);
 public RList SearchByKey(int key, RList rl)
 {
     while (rl.next != null)
     {
         if (rl.data == key)
         {
             return(rl);
         }
         rl = rl.next;
     }
     return(rl);
 }
예제 #6
0
 //принт начиная с последнеого
 public void RecInvPrint2(RList rl)
 {
     if (rl.next == null)
     {
         Console.WriteLine(rl.data);
     }
     else
     {
         RecInvPrint2(rl.next);
         Console.WriteLine(rl.data);
     }
 }
예제 #7
0
 //1,3 , 5, 8, 16, 24, 35, 40, 55
 public void Print(RList kek)
 {
     Console.WriteLine();
     if (kek.next == null)
     {
         Console.Write(" " + kek.data + " ");
     }
     else
     {
         Print(kek.next);
         Console.Write(" " + kek.data + " ");
     }
 }
예제 #8
0
        //55.Індексатор з двома параметрами, що дозволяє знайти мінімальне значення
        //серед значень елементів, розташованих між елементами із заданими номерами.

        public int this[int i, int j, RList rl]
        {
            get
            {
                int count = 0;
                int cou   = 0;
                //обрезаем конец листа
                RList temp = CutJ(j - 1, rl);
                //обрезаем начало листа
                temp = Cut(i, temp);
                //находим минимальое число в промежутке
                return(finmin(temp));
            }
        }
예제 #9
0
        public static RList Reverse(RList rl)
        {
            dynamic n = null;

            while (rl != null)
            {
                RList temp = rl.next;
                rl.next = n;
                n       = rl;
                rl      = temp;
            }
            rl = n;

            return(rl);
        }
예제 #10
0
        public static RList Cut(int i, RList rl)
        {
            int count = 0;

            while (rl.next != null)
            {
                count++;
                if (count == i)
                {
                    return(new RList(rl.next));
                }
                rl = rl.next;
            }
            return(new RList());
        }
예제 #11
0
        public static RList CutJ(int j, RList rl)
        {
            int   count = 0;
            RList temp  = new RList(rl.data);

            while (count != j)
            {
                count++;
                RList lul = new RList(rl.next.data);
                lul.next = temp;
                temp     = lul;
                rl       = rl.next;
            }

            return(Reverse(temp));
        }
예제 #12
0
        //add last
        public void Add(int num)
        {
            if (next == null)
            {
                next = new RList(num);
            }
            else
            {
                RList kek = next;

                while (kek.next != null)
                {
                    kek = kek.next;
                }
                kek.next = new RList(num);
            }
        }
예제 #13
0
        public static int finmin(RList LR)
        {
            int min = 10000;

            while (LR.next != null)
            {
                if (LR.data < min)
                {
                    min = LR.data;
                }
                LR = LR.next;
            }
            //на случай если последний элемент наименьший
            if (LR.data < min)
            {
                min = LR.data;
            }
            return(min);
        }
예제 #14
0
        //24. Метод видалення всіх парних за значенням елементів;
        public RList DeleteAbleByTwo(RList rl)
        {
            RList kek  = rl;
            RList prev = null;

            if (kek == null)
            {
                return(prev);
            }
            if (kek.next == null)
            {
                if (kek.data % 2 == 0)
                {
                    return(null);
                }
            }
            while (kek != null)
            {
                if (kek.data % 2 == 0)
                {
                    if (prev == null)
                    {
                        rl  = rl.next;
                        kek = rl;
                    }
                    else
                    {
                        prev.next = kek.next;
                        kek       = kek.next;
                    }
                }
                else
                {
                    prev = kek;
                    kek  = kek.next;
                }
            }
            return(rl);
        }
예제 #15
0
 public RList(int i, RList n)
 {
     data = i;
     next = n;
 }
예제 #16
0
 public RList()
 {
     data = default(int);
     next = null;
 }
예제 #17
0
 public RList(int i)
 {
     data = i;
     next = null;
 }
예제 #18
0
 public RList(RList n)
 {
     data = n.data;
     next = n.next;
 }
예제 #19
0
        static void Main(string[] args)
        {
            Console.WriteLine("Enter the first element to create a recursive singly linked list\n");

            RList kek = new RList(Convert.ToInt32(Console.ReadLine()));

            while (true)
            {
                ShowMenu();
                int x = Convert.ToInt32(Console.ReadLine());


                switch (x)
                {
                case 0:
                    Environment.Exit(0);
                    break;

                case 1:
                    Console.WriteLine();
                    kek.Print(kek);
                    Console.WriteLine();
                    break;

                case 2:
                    Console.WriteLine("\n Enter the element you wanna insert");
                    kek.Add(Convert.ToInt32(Console.ReadLine()));
                    break;

                case 3:
                    Console.WriteLine("List looks like this:");
                    kek.Print(kek);
                    Console.WriteLine("\n Enter the postion you wanna insert");
                    int pos = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("Enter the number you wanna insert");
                    int num = Convert.ToInt32(Console.ReadLine());
                    kek.AddAtRec(pos, num, kek);
                    break;

                case 4:
                    Console.WriteLine("\n Enter the position you wanna delete");
                    int pos2 = Convert.ToInt32(Console.ReadLine());
                    kek.DeleteAtRec(pos2, kek);
                    break;

                case 5:
                    kek.DeleteAbleByTwo(kek);
                    break;

                case 6:
                    Console.WriteLine();
                    kek.RecInvPrint1(kek);
                    Console.WriteLine();
                    kek.RecInvPrint2(kek);
                    break;

                case 7:
                    Console.WriteLine("\nEnter the key you wanna get link to");
                    int key = Convert.ToInt32(Console.ReadLine());
                    kek.Print(kek.SearchByKey(key, kek));
                    break;

                case 8:
                    kek.Print(kek);
                    Console.WriteLine("\nEnter element FROM");
                    int _from = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("\nEnter element TO");
                    int _to = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("The minimal number is");
                    Console.WriteLine(kek[_from, _to, kek]);
                    break;
                }


                //1,3 , 5, 8, 16, 24, 35, 40, 55
            }
        }