/// <summary> /// 删除数据节点 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="t_Node"></param> public void RemoveNode(Func <IEventTopic, bool> t_Handler) { var t_ToList = m_SLinkedList.ToList(); //转换成System.List for (int i = 0; i < t_ToList.Count; i++) { if (t_Handler(t_ToList[i])) { m_SLinkedList.RemoveAt(i); return; } } }
public static void DoTest() { int index = 0; SLinkedList <int> listOfNumbers1 = new SLinkedList <int>(); listOfNumbers1.Append(10); listOfNumbers1.Append(124); listOfNumbers1.Prepend(654); listOfNumbers1.Prepend(8); listOfNumbers1.Append(127485693); listOfNumbers1.Append(34); listOfNumbers1.Append(823); listOfNumbers1.RemoveAt(0); listOfNumbers1.RemoveAt(3); listOfNumbers1.RemoveAt(4); listOfNumbers1.RemoveAt(2); listOfNumbers1.RemoveAt(2); listOfNumbers1.RemoveAt(0); listOfNumbers1.Prepend(3); listOfNumbers1.Prepend(2); listOfNumbers1.Prepend(1); // Print List and Count listOfNumbers1.InsertAt(444, listOfNumbers1.Count); listOfNumbers1.InsertAt(555, listOfNumbers1.Count); listOfNumbers1.InsertAt(222, 2); index = (listOfNumbers1.Count - 1); var arrayVersion = listOfNumbers1.ToArray(); Assert.True(arrayVersion.Length == listOfNumbers1.Count); /************************************************************************************/ var listOfNumbers2 = new SLinkedList <int>(); listOfNumbers2.Append(23); listOfNumbers2.Append(42); listOfNumbers2.Append(4); listOfNumbers2.Append(16); listOfNumbers2.Append(8); listOfNumbers2.Append(15); listOfNumbers2.Append(9); listOfNumbers2.Append(55); listOfNumbers2.Append(0); listOfNumbers2.Append(34); listOfNumbers2.Append(12); listOfNumbers2.Append(2); listOfNumbers2.SelectionSort(); var intArray = listOfNumbers2.ToArray(); Assert.True(intArray[0] == 0 && intArray[intArray.Length - 1] == 55, "Wrong sorting!"); }
public static void DoTest() { SLinkedList <int> listOfNumbers1 = new SLinkedList <int>(); listOfNumbers1.Append(10); listOfNumbers1.Append(124); listOfNumbers1.Prepend(654); listOfNumbers1.Prepend(8); listOfNumbers1.Append(127485693); listOfNumbers1.Append(34); listOfNumbers1.Append(824); listOfNumbers1.RemoveAt(0); listOfNumbers1.RemoveAt(3); listOfNumbers1.RemoveAt(4); listOfNumbers1.RemoveAt(2); listOfNumbers1.RemoveAt(2); listOfNumbers1.RemoveAt(0); listOfNumbers1.Prepend(3); listOfNumbers1.Prepend(2); listOfNumbers1.Prepend(1); listOfNumbers1.InsertAt(444, listOfNumbers1.Count); listOfNumbers1.InsertAt(555, listOfNumbers1.Count); listOfNumbers1.InsertAt(222, 2); var arrayVersion = listOfNumbers1.ToArray(); Assert.True(arrayVersion.Length == listOfNumbers1.Count); /*******************************************************/ var listOfNumbers2 = new SLinkedList <int>(); listOfNumbers2.Append(23); listOfNumbers2.Append(42); listOfNumbers2.Append(4); listOfNumbers2.Append(16); listOfNumbers2.Append(8); listOfNumbers2.Append(15); listOfNumbers2.Append(9); listOfNumbers2.Append(55); listOfNumbers2.Append(0); listOfNumbers2.Append(34); listOfNumbers2.Append(12); listOfNumbers2.Append(2); listOfNumbers2.SelectionSort(); var intArray = listOfNumbers2.ToArray(); foreach (var item in listOfNumbers2) { Console.WriteLine(item); } Assert.True(intArray[0] == 0 && intArray[intArray.Length - 1] == 55, "Wrong sorting"); }
public static Node MakeHuffmanTree(HashTable<char, int> frequencyTable) { //First, create a singly linked list of nodes to return SLinkedList<Node> looseNodes = new SLinkedList<Node>(); //we need to loop through the given frequency table SLinkedList<char> keys = frequencyTable.Keys; for (int i = 0; i < keys.Size; i++) { //make new node for each element in hash table Node n = new Node(); //node Data is current key (keys[i]) n.Data = keys[i]; //node frequency is going to be the value for the current key (table[key]) n.Frequency = frequencyTable[keys[i]]; //add this new node to the end(tail) of the loose nodes list looseNodes.AddTail(n); }//end loop /* Comments, no code */ // Next we need to take this loose collection of nodes and build a tree out of it. // We do this by combining the smallest value nodes under a parent node. Each iteration // Of the below loop will reduce size by 1, because it removes two nodes and adds one. // We know we have a tree built, when the loose nodes list has a size of 1. /* End comments */ //loop while the looseNodes list has more than one element in it while (looseNodes.Size > 1) { //make local variable called left and set it to looseNodes[0] Node left = looseNodes[0]; //we want to set left to the lowest frequency node, loop through nodes for (int i = 0; i < looseNodes.Size; i++) { //if frequency of current node is less than left if (left.Frequency > looseNodes[i].Frequency) { //set left to current node left = looseNodes[i]; }//end if }//end loop //now that we have a reference to the smallest node, lets remove it from the list looseNodes.RemoveAt(looseNodes.IndexOf(left)); //Repeat above steps for a new local node called right Node right = looseNodes[0]; for (int i = 0; i < looseNodes.Size; i++) { if (right.Frequency > looseNodes[i].Frequency) { right = looseNodes[i]; } } looseNodes.RemoveAt(looseNodes.IndexOf(right)); //Make a new node Node n = new Node(); //set its left to the local left node n.Left = right; //set its right to the local right node n.Right = left; //set its frequency to the sum of the left and right nodes frequencies n.Frequency = right.Frequency + left.Frequency; //set its data to '\0' (char equivalent of null) n.Data = '\0'; //Add the new node to the end of the looseNodes list(AddTail) looseNodes.AddTail(n); }//end loop //at this point the loose node list has only one element, and it's the root node of our huffman table //return [0] of the loose list return looseNodes[0]; //end loop ?? what loop }
public static void DoTest () { int index = 0; SLinkedList<int> listOfNumbers1 = new SLinkedList<int>(); listOfNumbers1.Append(10); listOfNumbers1.Append(124); listOfNumbers1.Prepend(654); listOfNumbers1.Prepend(8); listOfNumbers1.Append(127485693); listOfNumbers1.Append(34); listOfNumbers1.Append(823); Console.WriteLine(listOfNumbers1.ToReadable()); listOfNumbers1.RemoveAt(0); Console.WriteLine("Removed 1st:\r\n" + listOfNumbers1.ToReadable()); listOfNumbers1.RemoveAt(3); listOfNumbers1.RemoveAt(4); Console.WriteLine("Removed 3rd & 4th:\r\n" + listOfNumbers1.ToReadable()); listOfNumbers1.RemoveAt(2); Console.WriteLine("Removed 3rd:\r\n" + listOfNumbers1.ToReadable()); listOfNumbers1.RemoveAt(2); Console.WriteLine("Removed 3rd:\r\n" + listOfNumbers1.ToReadable()); listOfNumbers1.RemoveAt(0); Console.WriteLine("Remove 1st:\r\n" + listOfNumbers1.ToReadable()); listOfNumbers1.Prepend(3); listOfNumbers1.Prepend(2); listOfNumbers1.Prepend(1); // Print List and Count Console.WriteLine(listOfNumbers1.ToReadable()); Console.WriteLine("Count: " + listOfNumbers1.Count + "\r\n"); listOfNumbers1.InsertAt(444, listOfNumbers1.Count); listOfNumbers1.InsertAt(555, listOfNumbers1.Count); listOfNumbers1.InsertAt(222, 2); Console.WriteLine(listOfNumbers1.ToReadable()); Console.WriteLine("Count: " + listOfNumbers1.Count + "\r\n"); index = 0; Console.WriteLine("Get At " + index + ": " + listOfNumbers1.GetAt(index)); index = (listOfNumbers1.Count / 2) + 1; Console.WriteLine("Get At " + index + ": " + listOfNumbers1.GetAt(index)); index = (listOfNumbers1.Count / 2) + 2; Console.WriteLine("Get At " + index + ": " + listOfNumbers1.GetAt(index)); index = (listOfNumbers1.Count - 1); Console.WriteLine("Get At " + index + ": " + listOfNumbers1.GetAt(index)); Console.WriteLine(); Console.WriteLine("GetRange(0, 3):\r\n" + listOfNumbers1.GetRange(0, 3).ToReadable()); var arrayVersion = listOfNumbers1.ToArray(); Debug.Assert (arrayVersion.Length == listOfNumbers1.Count); /************************************************************************************/ var listOfNumbers2 = new SLinkedList<int>(); listOfNumbers2.Append(23); listOfNumbers2.Append(42); listOfNumbers2.Append(4); listOfNumbers2.Append(16); listOfNumbers2.Append(8); listOfNumbers2.Append(15); listOfNumbers2.Append(9); listOfNumbers2.Append(55); listOfNumbers2.Append(0); listOfNumbers2.Append(34); listOfNumbers2.Append(12); listOfNumbers2.Append(2); listOfNumbers2.SelectionSort(); var intArray = listOfNumbers2.ToArray(); Debug.Assert(intArray[0] == 0 && intArray[intArray.Length - 1] == 55, "Wrong sorting!"); }
public static void DoTest() { int index = 0; SLinkedList <int> listOfNumbers1 = new SLinkedList <int>(); listOfNumbers1.Append(10); listOfNumbers1.Append(124); listOfNumbers1.Prepend(654); listOfNumbers1.Prepend(8); listOfNumbers1.Append(127485693); listOfNumbers1.Append(34); listOfNumbers1.Append(823); Console.WriteLine(listOfNumbers1.ToReadable()); listOfNumbers1.RemoveAt(0); Console.WriteLine("Removed 1st:\r\n" + listOfNumbers1.ToReadable()); listOfNumbers1.RemoveAt(3); listOfNumbers1.RemoveAt(4); Console.WriteLine("Removed 3rd & 4th:\r\n" + listOfNumbers1.ToReadable()); listOfNumbers1.RemoveAt(2); Console.WriteLine("Removed 3rd:\r\n" + listOfNumbers1.ToReadable()); listOfNumbers1.RemoveAt(2); Console.WriteLine("Removed 3rd:\r\n" + listOfNumbers1.ToReadable()); listOfNumbers1.RemoveAt(0); Console.WriteLine("Remove 1st:\r\n" + listOfNumbers1.ToReadable()); listOfNumbers1.Prepend(3); listOfNumbers1.Prepend(2); listOfNumbers1.Prepend(1); // Print List and Count Console.WriteLine(listOfNumbers1.ToReadable()); Console.WriteLine("Count: " + listOfNumbers1.Count + "\r\n"); listOfNumbers1.InsertAt(444, listOfNumbers1.Count); listOfNumbers1.InsertAt(555, listOfNumbers1.Count); listOfNumbers1.InsertAt(222, 2); Console.WriteLine(listOfNumbers1.ToReadable()); Console.WriteLine("Count: " + listOfNumbers1.Count + "\r\n"); index = 0; Console.WriteLine("Get At " + index + ": " + listOfNumbers1.GetAt(index)); index = (listOfNumbers1.Count / 2) + 1; Console.WriteLine("Get At " + index + ": " + listOfNumbers1.GetAt(index)); index = (listOfNumbers1.Count / 2) + 2; Console.WriteLine("Get At " + index + ": " + listOfNumbers1.GetAt(index)); index = (listOfNumbers1.Count - 1); Console.WriteLine("Get At " + index + ": " + listOfNumbers1.GetAt(index)); Console.WriteLine(); Console.WriteLine("GetRange(0, 3):\r\n" + listOfNumbers1.GetRange(0, 3).ToReadable()); var arrayVersion = listOfNumbers1.ToArray(); Debug.Assert(arrayVersion.Length == listOfNumbers1.Count); /************************************************************************************/ var listOfNumbers2 = new SLinkedList <int>(); listOfNumbers2.Append(23); listOfNumbers2.Append(42); listOfNumbers2.Append(4); listOfNumbers2.Append(16); listOfNumbers2.Append(8); listOfNumbers2.Append(15); listOfNumbers2.Append(9); listOfNumbers2.Append(55); listOfNumbers2.Append(0); listOfNumbers2.Append(34); listOfNumbers2.Append(12); listOfNumbers2.Append(2); listOfNumbers2.SelectionSort(); var intArray = listOfNumbers2.ToArray(); Debug.Assert(intArray[0] == 0 && intArray[intArray.Length - 1] == 55, "Wrong sorting!"); }