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;
}