Advertisement
Guest User

Untitled

a guest
Sep 16th, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.81 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace kollekcii
  8. {
  9.    class Program
  10.    {
  11.        static void Main(string[] args)
  12.        {
  13.  
  14.            listS A = new listS();
  15.            A.AddF("c");
  16.            A.AddF("b");
  17.            A.AddF("a");
  18.            listS B = new listS();
  19.            B.AddF("f");
  20.            B.AddF("e");
  21.            B.AddF("d");
  22.  
  23.            listS C = A + B;
  24.  
  25.            for (int i = 0; i < C.count; i++)
  26.            {
  27.                Console.Write(C[i] + " ");
  28.            }
  29.  
  30.        }
  31.    }
  32. class listS // Создание класса List
  33.    {
  34.        public El_list First, Last; // Переменный ссылок на первый и последний элемент в коллекции
  35.        public int count; // Переменная размерности коллекции
  36.        public int Count { get { return count; } set { count = value; } } // Доступ к чтению и изменению count (необязательно в принципе)
  37.  
  38.        public listS() // Конструктор
  39.        {
  40.            First = null; // Ссылки на певрый нет
  41.            Last = null; // Ссылки на последний нет
  42.            count = 0; // Размер 0  
  43.        }
  44.  
  45.        public static listS operator +(listS A, listS B)
  46.        {
  47.            A.Last.next = B.First;
  48.            B.First.pred = A.Last;
  49.  
  50.            listS C = new listS();
  51.  
  52.            for (int i = A.count - 1; i >= 0; i--)
  53.            {
  54.                C.AddEl(A[i]);
  55.            }
  56.            for (int i = B.count - 1; i >= 0; i--)
  57.            {
  58.                C.AddEl(B[i]);
  59.            }
  60.            C.First = A.First;
  61.            C.Last = B.Last;
  62.            return C;
  63.        }
  64.  
  65.        public void AddF(string d) // Добавление элемента в начало списка. В данном случае переменной типа string
  66.        {
  67.            El_list t; // объявить экземляр класса "Элемент листа"(El_list)
  68.            if (First == null) // Если ссылка на первый элемент пустая, т.е. коллекция пустая
  69.            {
  70.                t = new El_list(null, d, null); // то создать экземпляр класса "Элемент класа" с пустыми ссылками на след и пред элементы,
  71.                                                // т.к. их нет, элемент то один. Содержимое элемента это d(поступает на входе в метод).
  72.                First = Last = t; // Первый и последний элемент соответственно один и тот же, это t
  73.                Count++; // Размерность увеличить на 1
  74.                return; // Выйти из метода
  75.            }
  76.            t = new El_list(null, d, First); // если же ссылка на первый элемент не пустая, то создать экзмепляр класса "Элемент класса" с
  77.                                             // пустой ссылкой на 1 элемент списка(тк добавление в начало списка), а ссылка на следующий элемент
  78.                                             // будет ссылка на ранне первый элемент(тк после добавления он стал вторым)
  79.            First.pred = t; // Элементу который был первым (теперь стал вторым) изменить ссылку на предыдущий элемент. Сделать ее равной новому первому элементу
  80.            First = t; // Изменить ссылку на первый элемент в списке. Сделать ее равной добвленному элементу
  81.            Count++; // Увеличить размерность листа
  82.        }
  83.  
  84.        public void AddEl(El_list A) // Добавление уже существующего "Элемента класса". Это нужно для сложения двух списков.
  85.        {
  86.            if (First == null)
  87.            {
  88.                //t = new El_list(null, d, null);
  89.                First = Last = A;
  90.                Count++;
  91.                return;
  92.            }
  93.            First.pred = A;
  94.            First = A;
  95.            Count++;
  96.        }
  97.  
  98.        //индексатор
  99.        public El_list this[int i]
  100.        {
  101.            get
  102.            {
  103.                El_list t = First;
  104.                if (i != 0)
  105.                {
  106.                    for (int it = 1; it <= i; ++it)
  107.                    {
  108.                        t = t.next;
  109.                    }
  110.                }
  111.                return t;
  112.            }
  113.        }
  114.  
  115.    }
  116. class El_list // Класс "Элемент листа"
  117.    {
  118.        public string dat; // Данные содержащиеся в элементе. В данном случае string
  119.        public El_list pred, next; // Ссылки на предыдущий и следующий элемент
  120.        public El_list() { } // Конструктор по умолчанию
  121.        public El_list(El_list pred, string dat,El_list next) // Конструктор с параметрами: ссылка на предыдущий эелмент, содержимое элемента,
  122.                                                              // ссылка на следующий элемент
  123.        {
  124.            this.pred = pred;
  125.            this.dat = dat;
  126.            this.next = next;
  127.        }
  128.  
  129.        public override string ToString()
  130.        {
  131.            return dat;
  132.        }
  133.    }
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement