Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace kollekcii
- {
- class Program
- {
- static void Main(string[] args)
- {
- listS A = new listS();
- A.AddF("c");
- A.AddF("b");
- A.AddF("a");
- listS B = new listS();
- B.AddF("f");
- B.AddF("e");
- B.AddF("d");
- listS C = A + B;
- for (int i = 0; i < C.count; i++)
- {
- Console.Write(C[i] + " ");
- }
- }
- }
- class listS // Создание класса List
- {
- public El_list First, Last; // Переменный ссылок на первый и последний элемент в коллекции
- public int count; // Переменная размерности коллекции
- public int Count { get { return count; } set { count = value; } } // Доступ к чтению и изменению count (необязательно в принципе)
- public listS() // Конструктор
- {
- First = null; // Ссылки на певрый нет
- Last = null; // Ссылки на последний нет
- count = 0; // Размер 0
- }
- public static listS operator +(listS A, listS B)
- {
- A.Last.next = B.First;
- B.First.pred = A.Last;
- listS C = new listS();
- for (int i = A.count - 1; i >= 0; i--)
- {
- C.AddEl(A[i]);
- }
- for (int i = B.count - 1; i >= 0; i--)
- {
- C.AddEl(B[i]);
- }
- C.First = A.First;
- C.Last = B.Last;
- return C;
- }
- public void AddF(string d) // Добавление элемента в начало списка. В данном случае переменной типа string
- {
- El_list t; // объявить экземляр класса "Элемент листа"(El_list)
- if (First == null) // Если ссылка на первый элемент пустая, т.е. коллекция пустая
- {
- t = new El_list(null, d, null); // то создать экземпляр класса "Элемент класа" с пустыми ссылками на след и пред элементы,
- // т.к. их нет, элемент то один. Содержимое элемента это d(поступает на входе в метод).
- First = Last = t; // Первый и последний элемент соответственно один и тот же, это t
- Count++; // Размерность увеличить на 1
- return; // Выйти из метода
- }
- t = new El_list(null, d, First); // если же ссылка на первый элемент не пустая, то создать экзмепляр класса "Элемент класса" с
- // пустой ссылкой на 1 элемент списка(тк добавление в начало списка), а ссылка на следующий элемент
- // будет ссылка на ранне первый элемент(тк после добавления он стал вторым)
- First.pred = t; // Элементу который был первым (теперь стал вторым) изменить ссылку на предыдущий элемент. Сделать ее равной новому первому элементу
- First = t; // Изменить ссылку на первый элемент в списке. Сделать ее равной добвленному элементу
- Count++; // Увеличить размерность листа
- }
- public void AddEl(El_list A) // Добавление уже существующего "Элемента класса". Это нужно для сложения двух списков.
- {
- if (First == null)
- {
- //t = new El_list(null, d, null);
- First = Last = A;
- Count++;
- return;
- }
- First.pred = A;
- First = A;
- Count++;
- }
- //индексатор
- public El_list this[int i]
- {
- get
- {
- El_list t = First;
- if (i != 0)
- {
- for (int it = 1; it <= i; ++it)
- {
- t = t.next;
- }
- }
- return t;
- }
- }
- }
- class El_list // Класс "Элемент листа"
- {
- public string dat; // Данные содержащиеся в элементе. В данном случае string
- public El_list pred, next; // Ссылки на предыдущий и следующий элемент
- public El_list() { } // Конструктор по умолчанию
- public El_list(El_list pred, string dat,El_list next) // Конструктор с параметрами: ссылка на предыдущий эелмент, содержимое элемента,
- // ссылка на следующий элемент
- {
- this.pred = pred;
- this.dat = dat;
- this.next = next;
- }
- public override string ToString()
- {
- return dat;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement