Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- namespace d1
- {
- // Клас за представяне на елемент от списъка
- public class Node<T>
- {
- // Поле за съхранение на стойността на елемента
- public T Value { get; set; }
- // Поле за съхранение на връзка към следващия елемент
- public Node<T> Next { get; set; }
- // Конструктор с параметър за стойността на елемента
- public Node(T value)
- {
- Value = value;
- Next = null;
- }
- }
- // Клас за представяне на списък
- public class List<T>
- {
- // Поле за съхранение на първия елемент на списъка
- private Node<T> head;
- // Поле за съхранение на последния елемент на списъка
- private Node<T> tail;
- // Поле за съхранение на броя на елементите в списъка
- private int count;
- // Конструктор без параметри
- public List()
- {
- head = null;
- tail = null;
- count = 0;
- }
- // Метод за проверка дали списъкът е празен
- public bool IsEmpty()
- {
- return count == 0;
- }
- // Метод за добавяне на елемент в началото на списъка
- public void AddFirst(T value)
- {
- Node<T> node = new Node<T>(value); // Създаваме нов елемент с посочената стойност
- if (IsEmpty()) // Ако списъкът е празен
- {
- head = node; // Задаваме първия и последния елемент да сочат към новия елемент
- tail = node;
- }
- else // Ако списъкът не е празен
- {
- node.Next = head; // Задаваме новия елемент да сочи към първия елемент
- head = node; // Задаваме първия елемент да сочи към новия елемент
- }
- count++; // Увеличаваме броя на елементите с 1
- }
- // Метод за добавяне на елемент в края на списъка
- public void AddLast(T value)
- {
- Node<T> node = new Node<T>(value); // Създаваме нов елемент с посочената стойност
- if (IsEmpty()) // Ако списъкът е празен
- {
- head = node; // Задаваме първия и последния елемент да сочат към новия елемент
- tail = node;
- }
- else // Ако списъкът не е празен
- {
- tail.Next = node; // Задаваме последния елемент да сочи към новия елемент
- tail = node; // Задаваме последния елемент да сочи към новия елемент
- }
- count++; // Увеличаваме броя на елементите с 1
- }
- // Метод за премахване на първия елемент от списъка
- public T RemoveFirst()
- {
- if (IsEmpty()) // Ако списката е празен
- {
- throw new InvalidOperationException("Списката е празен."); // Хвърляме изключение
- }
- T value = head.Value; // Запазваме стойността на първия елемент в променлива
- if (count == 1) // Ако има само един елемент в списката
- {
- head = null; // Задаваме първия и последния да сочат към null, което означава, че списъкът става празен
- tail = null;
- }
- else // Ако има повече от един елемент в списъка
- {
- head = head.Next; // Задаваме първия елемент да сочи към втория елемент
- }
- count--; // Намаляваме броя на елементите с 1
- return value; // Връщаме запазената стойност като резултат от метода
- }
- // Метод за премахване на последния елемент от списъка
- public T RemoveLast()
- {
- if (IsEmpty()) // Ако списката е празен
- {
- throw new InvalidOperationException("Списката е празен."); // Хвърляме изключение
- }
- T value = tail.Value; // Запазваме стойността на последния елемент в променлива
- if (count == 1) // Ако има само един елемент в списъка
- {
- head = null; // Задаваме първия и последния да сочат към null, което означава, че спискът става празен
- tail = null;
- }
- else // Ако има повече от един елемент в списъка
- {
- Node<T> current = head; // Създаваме помощна променлива за обхождане на списъка
- while (current.Next != tail) // Докато не стигнем предпоследния елемент
- {
- current = current.Next; // Преминаваме към следващия елемент
- }
- current.Next = null; // Задаваме предпоследния елемент да сочи към null
- tail = current; // Задаваме последния елемент да сочи към предпоследния елемент
- }
- count--; // Намаляваме броя на елементите с 1
- return value; // Връщаме запазената стойност като резултат от метода
- }
- // Метод за връщане на първия елемент от списъка без да го премахваме
- public T GetFirst()
- {
- if (IsEmpty()) // Ако списката е празен
- {
- throw new InvalidOperationException("Списката е празен."); // Хвърляме изключение
- }
- return head.Value; // Връщаме стойността на първия елемент като резултат от метода
- }
- // Метод за връщане на последния елемент от списъка без да го премахваме
- public T GetLast()
- {
- if (IsEmpty()) // Ако списката е празен
- {
- throw new InvalidOperationException("Списката е празен."); // Хвърляме изключение
- }
- return tail.Value; // Връщаме стойността на последния елемент като резултат от метода
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement