c#中链表+优先级的示例分析
这篇文章给大家分享的是有关c#中链表+优先级的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
成都创新互联公司专业为企业提供兰州网站建设、兰州做网站、兰州网站设计、兰州网站制作等企业网站建设、网页设计与制作、兰州企业网站模板建站服务,十载兰州做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
==================================Document.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication4
{
public class Document//文档类
{
public string Title { get; private set; }//标题
public string Content { get; private set; }//内容
public byte Priority { get; private set; }//优先级
public Document(string title, string content, byte priority)
{
this.Title = title;
this.Content = content;
this.Priority = priority;
}
public override string ToString()
{
return string.Format("标题:{0},内容:{1},优先级:{2}", this.Title, this.Content, this.Priority);
}
}
}==================================PriorityDocumentManage.cs【核心】
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
namespace ConsoleApplication4
{
public class PriorityDocumentManage:IEnumerable
{
//链表
private readonly LinkedList documentList;
//优先级节点
private readonly List> priorityNodes;
public PriorityDocumentManage()
{
//初始化链表
documentList = new LinkedList();
//初始化优先级节点
priorityNodes = new List>();
//设置优先级为0~9
for (int i = 0; i < 10; i++)
{
priorityNodes.Add(new LinkedListNode(null));
}
}
//向链表中添加文档
public void AddDocument(Document d)
{
if (d == null) throw new ArgumentNullException("对象不能为空");
AddDcoumentToPriorityNode(d, d.Priority);
}
private void AddDcoumentToPriorityNode(Document doc, int priority)
{
if (priority > 9 || priority < 0) throw new ArgumentException("优先级溢出");
if (priorityNodes[priority].Value == null)//该优先级节点的值为空,说明链表中还没有存在该优先级的元素
{
--priority;
if (priority >= 0)//继续往更低的优先级下面找
{
AddDcoumentToPriorityNode(doc, priority);
}
else//进入此方法,说明是第一个插入链表的元素
{
documentList.AddLast(doc);//将元素插入到链表的最后位置
priorityNodes[doc.Priority] = documentList.Last;//把传入的元素赋值给对应优先级的优先级节点
}
}
else
{
LinkedListNode currentDoc = priorityNodes[priority];
if (doc.Priority == priority)//优先级节点存对应的优先级已存在元素【优先级节点只存对应优先级最后添加的元素】
{
documentList.AddAfter(currentDoc, doc);//将元素插入到对应元素的后面
priorityNodes[doc.Priority] = currentDoc.Next;//将对应的优先级节点赋值为对应优先级最后添加的元素
}
else//说明不是传入元素对应的优先级节点
{
while (currentDoc.Previous != null && currentDoc.Previous.Value.Priority == priority)//找到该优先级最前面的元素
{
currentDoc = currentDoc.Previous;
}
documentList.AddBefore(currentDoc, doc);//插入该元素的前面
priorityNodes[doc.Priority] = currentDoc.Previous;//将对应的优先级节点赋值为对应优先级最后添加的元素
}
}
}
public IEnumerator GetEnumerator()
{
return documentList.GetEnumerator();
}
//找到第一个元素,并删除该元素
public Document GetDocument()
{
Document d = documentList.First.Value;
documentList.RemoveFirst();
return d;
}
}
} ==================================主程序
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
PriorityDocumentManage pdm = new PriorityDocumentManage();
pdm.AddDocument(new Document("a", "a", 5));
pdm.AddDocument(new Document("b", "b", 5));
pdm.AddDocument(new Document("c", "c", 8));
pdm.AddDocument(new Document("d", "d", 5));
pdm.AddDocument(new Document("e", "e", 6));
foreach (var item in pdm)
{
Console.WriteLine(item);
}
Console.ReadKey();
}
}
}
感谢各位的阅读!关于“c#中链表+优先级的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
网站标题:c#中链表+优先级的示例分析
新闻来源:http://www.jxjierui.cn/article/gscsce.html


咨询
建站咨询
