链表+优先级
==================================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;?}//標(biāo)題public?string?Content?{?get;?private?set;?}//內(nèi)容public?byte?Priority?{?get;?private?set;?}//優(yōu)先級(jí)public?Document(string?title,?string?content,?byte?priority){this.Title?=?title;this.Content?=?content;this.Priority?=?priority;}public?override?string?ToString(){return?string.Format("標(biāo)題:{0},內(nèi)容:{1},優(yōu)先級(jí):{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<Document>?documentList;//優(yōu)先級(jí)節(jié)點(diǎn)private?readonly?List<LinkedListNode<Document>>?priorityNodes;public?PriorityDocumentManage(){//初始化鏈表documentList?=?new?LinkedList<Document>();//初始化優(yōu)先級(jí)節(jié)點(diǎn)priorityNodes?=?new?List<LinkedListNode<Document>>();//設(shè)置優(yōu)先級(jí)為0~9for?(int?i?=?0;?i?<?10;?i++){priorityNodes.Add(new?LinkedListNode<Document>(null));}}//向鏈表中添加文檔public?void?AddDocument(Document?d){if?(d?==?null)?throw?new?ArgumentNullException("對(duì)象不能為空");AddDcoumentToPriorityNode(d,?d.Priority);}private?void?AddDcoumentToPriorityNode(Document?doc,?int?priority){if?(priority?>?9?||?priority?<?0)?throw?new?ArgumentException("優(yōu)先級(jí)溢出");if?(priorityNodes[priority].Value?==?null)//該優(yōu)先級(jí)節(jié)點(diǎn)的值為空,說(shuō)明鏈表中還沒(méi)有存在該優(yōu)先級(jí)的元素{--priority;if?(priority?>=?0)//繼續(xù)往更低的優(yōu)先級(jí)下面找{AddDcoumentToPriorityNode(doc,?priority);}else//進(jìn)入此方法,說(shuō)明是第一個(gè)插入鏈表的元素{documentList.AddLast(doc);//將元素插入到鏈表的最后位置priorityNodes[doc.Priority]?=?documentList.Last;//把傳入的元素賦值給對(duì)應(yīng)優(yōu)先級(jí)的優(yōu)先級(jí)節(jié)點(diǎn)}}else{LinkedListNode<Document>?currentDoc?=?priorityNodes[priority];if?(doc.Priority?==?priority)//優(yōu)先級(jí)節(jié)點(diǎn)存對(duì)應(yīng)的優(yōu)先級(jí)已存在元素【優(yōu)先級(jí)節(jié)點(diǎn)只存對(duì)應(yīng)優(yōu)先級(jí)最后添加的元素】{documentList.AddAfter(currentDoc,?doc);//將元素插入到對(duì)應(yīng)元素的后面priorityNodes[doc.Priority]?=?currentDoc.Next;//將對(duì)應(yīng)的優(yōu)先級(jí)節(jié)點(diǎn)賦值為對(duì)應(yīng)優(yōu)先級(jí)最后添加的元素}else//說(shuō)明不是傳入元素對(duì)應(yīng)的優(yōu)先級(jí)節(jié)點(diǎn){while?(currentDoc.Previous?!=?null?&&?currentDoc.Previous.Value.Priority?==?priority)//找到該優(yōu)先級(jí)最前面的元素{currentDoc?=?currentDoc.Previous;}documentList.AddBefore(currentDoc,?doc);//插入該元素的前面priorityNodes[doc.Priority]?=?currentDoc.Previous;//將對(duì)應(yīng)的優(yōu)先級(jí)節(jié)點(diǎn)賦值為對(duì)應(yīng)優(yōu)先級(jí)最后添加的元素}}}public?IEnumerator?GetEnumerator(){return?documentList.GetEnumerator();}//找到第一個(gè)元素,并刪除該元素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();}} }轉(zhuǎn)載于:https://blog.51cto.com/962410314/1546904
總結(jié)
- 上一篇: functools学习有感
- 下一篇: 图像处理之基础---仿射变换