C# 在C中添加排序链表#
我有这样一个类来实现C#中的排序链表。现在它实际上并没有被排序,但是我必须对这个方法做什么改变呢C# 在C中添加排序链表#,c#,generics,linked-list,sortedlist,C#,Generics,Linked List,Sortedlist,我有这样一个类来实现C#中的排序链表。现在它实际上并没有被排序,但是我必须对这个方法做什么改变呢 class LinkedSortedList<T> { public Node<T> Head { get; set; } public Node<T> Tail { get; set; } public int Count { get; set; } public LinkedSorted
class LinkedSortedList<T>
{
public Node<T> Head { get; set; }
public Node<T> Tail { get; set; }
public int Count { get; set; }
public LinkedSortedList()
{
Head = null;
Tail = null;
Count = 0;
}
public LinkedSortedList(T data)
{
CreateList(data);
}
public void AddElement(T data)
{
if (Tail != null)
{
var node = new Node<T>(data);
Tail.Next = node;
Tail = node;
Count++;
}
else
{
CreateList(data);
}
}
public void CreateList(T data)
{
var node = new Node<T>(data);
Head = node;
Tail = node;
Count = 1;
}
类链接分类列表
{
公共节点头{get;set;}
公共节点尾部{get;set;}
公共整数计数{get;set;}
公共链接分类列表()
{
Head=null;
Tail=null;
计数=0;
}
公共链接分类列表(T数据)
{
创建列表(数据);
}
公共无效补遗(T数据)
{
if(Tail!=null)
{
var节点=新节点(数据);
Tail.Next=节点;
尾=节点;
计数++;
}
其他的
{
创建列表(数据);
}
}
公共无效创建列表(T数据)
{
var节点=新节点(数据);
头部=节点;
尾=节点;
计数=1;
}
我想修改AddElement函数,使列表保持排序。如何实现此逻辑?完成任务需要注意的一点是,在
AddElement
的开头,列表要么是空的,要么是已排序的。如果列表是空的,则任务很简单;如果列表已排序,则必须执行p单击要添加的元素的插入点,然后将新元素插入其中。插入后列表将保持排序,因为不需要移动其他元素
要查找插入点,请从列表头开始遍历列表,直到(1)找到大于所插入元素的元素,或(2)您到达了列表的末尾。在这两种情况下,您只需在遍历过程中传递的最后一个元素之后立即插入新元素,或者如果初始元素大于您要插入的元素,则在开头插入新元素。当前,您只需将元素添加到列表的末尾。相反,我们希望遍历列表并查看t每个值,直到找到插入节点的正确位置 执行此操作的一种方法是执行以下检查:
public void AddElement(T data)
{
if (Head == null)
{
CreateList(data);
}
else
{
var node = new Node<T>(data);
if (node.Data < Head.Data)
{
Head.Previous = node;
node.Next = Head;
Head = node;
}
else if (node.Data > Tail.Data)
{
Tail.Next = node;
node.Previous = Tail;
Tail = node;
}
else
{
var current = Head;
while(node.Data >= current.Data && current.Next != null)
{
current = current.Next;
}
node.Previous = current.Previous;
if (node.Previous != null) node.Previous.Next = node;
current.Previous = node;
node.Next = current;
if (Head == current) Head = node;
Count++;
}
}
}
public void AddElement(T数据)
{
if(Head==null)
{
创建列表(数据);
}
其他的
{
var节点=新节点(数据);
if(node.DataTail.Data)
{
Tail.Next=节点;
node.Previous=Tail;
尾=节点;
}
其他的
{
无功电流=水头;
while(node.Data>=current.Data&¤t.Next!=null)
{
当前=当前。下一步;
}
node.Previous=当前.Previous;
如果(node.Previous!=null)node.Previous.Next=node;
当前.Previous=节点;
node.Next=当前;
如果(Head==当前)Head=节点;
计数++;
}
}
}
您需要迭代当前元素,根据排序顺序找到放置新元素的正确位置。最重要的是,您需要一种“排序”方法元素,因此您可以根据任意一对来决定哪个元素更大或更小。@Alejandro我想说您需要一种比较元素的方法。根据底层容器的不同,二进制搜索可能会加快速度。@JHBonarius OP正在制作一个链表,所以很遗憾二进制搜索无法工作。