IComparable для сортировки двусвязного списка - C#
Формулировка задачи:
Как отсортировать с помощью IComparable?
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _4laba { class Program { static void Main(string[] args) { GenericList<int> list = new GenericList<int>(); list.Add(10); list.Add(12); list.Add(13); list.Show(); list.GetIndexFromTail(10); System.Console.ReadKey(); } } class GenericList<T> { private class Node { private Node next;//скрытая ссылка на следующий элемент public Node Next//свойство "следующий элемент" { get { return next; } set { next = value; } } private Node prev;//скрытая ссылка на следующий элемент public Node Prev//свойство "следующий элемент" { get { return prev; } set { prev = value; } } private T data;//переменная типа Т, хранит данные public T Data//свойство для получения и установки данных типа Т в элементе { get { return data; } set { data = value; } } public Node() { next = null; data = default(T); } public Node(T t) { next = null; data = t; } } private Node head;//хранит ссылку на первый элемент в списке private Node tail;//хранит ссылку на последний элемент в списке public GenericList()//конструктор списка { head = null; tail = null; } public void Add(T t) { Node temp = new Node(t); if (head == null) { temp.Prev = null; head = tail = temp; } else { temp.Prev = tail; temp.Next = temp; tail = temp; } } public void Show() { ////ВЫВОДИМ СПИСОК С КОНЦА Node temp = tail; //Временный указатель на адрес последнего элемента while (temp != null) //Пока не встретится пустое значение { Console.WriteLine(temp.Data + " ");//Выводить значение на экран temp = temp.Prev; //Указываем, что нужен адрес предыдущего элемента } Console.WriteLine("\n"); } public void GetIndexFromTail(T data)//достать индекс по значению элемента { Node temp = tail; int i = 0; while (temp != null) { if (data.Equals(temp.Data)) { break; } else temp = temp.Prev; i++; } if (temp == null) { System.Console.WriteLine("There`s no value {0}", data); } else System.Console.WriteLine( i); } } }
Решение задачи: «IComparable для сортировки двусвязного списка»
textual
Листинг программы
public void Add(T t) { Node temp = new Node(t) { Prev = tail, Next = head }; if (head == null) head = tail = temp; tail.Next = temp; head.Prev = temp; tail = temp; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д