|
|
线性表(Linear List)是由n(n≥0)个数据元素(结点)a[0],a[1],a[2]…,a[n-1]组成的有限序列。.Net Framework的System.Collection命名空间内并没有提供对线性表的太多支持,只提供了ArrayList类似与顺序表。Snake.Net提供三种形式的线性表,顺序表,单向链表和双向链表分别对应类Eastasp.Framework.Collections.OrderedTable、Eastasp.Framework.Collections.SingleLink和Eastasp.Framework.Collections.DoubleLink。 先来了解一下三种表的概念:
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。 单向链表是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始。 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。
下面的代码中了解一下Snake.Net中的线性表
1 namespace Eastasp.Framework.Collections 2  { 3 namespace#region namespace 4 using System; 5 using System.Collections; 6 using Collections; 7 using Diagnostics; 8 using Utility; 9 using NUnit.Framework; 10 #endregion 11 12 class for CollectionTest#region class for CollectionTest 13 /**//// <summary> 14 /// Summary description for CollectionTest. 15 /// </summary> 16 [TestFixture] 17 public class CollectionTest:ITest 18 { 19 public CollectionTest() 20 { 21 } 22 23 [Test] 24 public void Test() 25 { 26 OutputLinks(); 27 } 28 29 private void OutputLinks() 30 { 31 //declare 32 ILink[] links; 33 34 //output start infomation 35 Console.Write("------- Starttest Links -------{0}{0}{0}", StringUtil.CrLf); 36 37 links = new ILink[] { 38 new OrderedTable(), 39 new SingleLink(), 40 new DoubleLink()}; 41 42 for(int i = 0; i < links.Length; i++) { 43 Console.Write("Start Test {0} {1}", links[i].GetType().FullName, StringUtil.CrLf); 44 OutputLink(links[i]); 45 Console.Write("Test Completed{1}{1}", links[i].GetType().FullName, StringUtil.CrLf); 46 } 47 48 //output end infomation 49 Console.Write("{0}{0}------- End test Links -------{0}{0}", StringUtil.CrLf); 50 } 51 52 53 private void OutputLink(ILink link) 54 { 55 //declare 56 object[] array; 57 DateTime start; 58 DateTime end; 59 TimeSpan passed; 60 61 start = DateTime.Now; 62 Console.Write(String.Format("Start date time:{0}{1}", start.ToString("MM/dd/yyyy HH:mm:ss"), StringUtil.CrLf)); 63 64 for(int i = 0; i < 10000; i++) { 65 66 link.Clear(); 67 68 //initialize 69 array = new object[] {"aaa", "bbb", "ccc", "ddd", "eee", "hhh", "fff", "ggg", "bb2", "cc2", "dd2", "ee2", "hh2", "ff2", "gg2", "iii", "jjj", "kkk"}; 70 link.AddRange(array); 71 Assert.AreEqual(link.Count, array.Length, "Error!"); 72 73 link.Add("000"); 74 Assert.AreEqual(link.Count, array.Length + 1, "Error!"); 75 76 link.Remove("ddd"); 77 Assert.AreEqual(link.Count, array.Length, "Error!"); 78 79 link.Insert(3, "222"); 80 Assert.AreEqual(link.Count, array.Length + 1, "Error!"); 81 82 link.RemoveAt(2); 83 Assert.AreEqual(link.Count, array.Length, "Error!"); 84 } 85 86 end = DateTime.Now; 87 passed = new TimeSpan(end.Ticks - start.Ticks); 88 Console.Write(String.Format("End date time:{0}{1}", end.ToString("MM/dd/yyyy HH:mm:ss"), StringUtil.CrLf)); 89 Console.Write(string.Format("spend {0} seconds, {1} milliseconds {2}", passed.Seconds, passed.Milliseconds, StringUtil.CrLf)); 90 } 91 } 92 #endregion 93 }
运行结果如下: ------- Starttest Links ------- Start Test Eastasp.Framework.Collections.OrderedTable Start date time:07-21-2005 09:58:16 End date time:07-21-2005 09:58:16 spend 0 seconds, 812 milliseconds Test Completed
Start Test Eastasp.Framework.Collections.SingleLink Start date time:07-21-2005 09:58:16 End date time:07-21-2005 09:58:17 spend 0 seconds, 765 milliseconds Test Completed Start Test Eastasp.Framework.Collections.DoubleLink Start date time:07-21-2005 09:58:17 End date time:07-21-2005 09:58:18 spend 0 seconds, 765 milliseconds Test Completed ------- End test Links -------
1 namespace Eastasp.Framework.Collections 2  { 3 namespace#region namespace 4 using System; 5 using System.Collections; 6 using Collections; 7 using Diagnostics; 8 using Utility; 9 using NUnit.Framework; 10 #endregion 11 12 class for CollectionTest#region class for CollectionTest 13 /**//// <summary> 14 /// Summary description for CollectionTest. 15 /// </summary> 16 [TestFixture] 17 public class CollectionTest:ITest 18 { 19 public CollectionTest() 20 { 21 } 22 23 [Test] 24 public void Test() 25 { 26 OutputLinks(); 27 } 28 29 private void OutputLinks() 30 { 31 //declare 32 ILink[] links; 33 34 //output start infomation 35 Console.Write("------- Starttest Links -------{0}{0}{0}", StringUtil.CrLf); 36 37 links = new ILink[] { 38 new OrderedTable(), 39 new SingleLink(), 40 new DoubleLink()}; 41 42 for(int i = 0; i < links.Length; i++) { 43 Console.Write("Start Test {0} {1}", links[i].GetType().FullName, StringUtil.CrLf); 44 OutputLink(links[i]); 45 Console.Write("Test Completed{1}{1}", links[i].GetType().FullName, StringUtil.CrLf); 46 } 47 48 //output end infomation 49 Console.Write("{0}{0}------- End test Links -------{0}{0}", StringUtil.CrLf); 50 } 51 52 53 private void OutputLink(ILink link) 54 { 55 //declare 56 object[] array; 57 DateTime start; 58 DateTime end; 59 TimeSpan passed; 60 61 start = DateTime.Now; 62 Console.Write(String.Format("Start date time:{0}{1}", start.ToString("MM/dd/yyyy HH:mm:ss"), StringUtil.CrLf)); 63 64 for(int i = 0; i < 10000; i++) { 65 66 link.Clear(); 67 68 //initialize 69 array = new object[] {"aaa", "bbb", "ccc", "ddd", "eee", "hhh", "fff", "ggg", "bb2", "cc2", "dd2", "ee2", "hh2", "ff2", "gg2", "iii", "jjj", "kkk"}; 70 link.AddRange(array); 71 Assert.AreEqual(link.Count, array.Length, "Error!"); 72 73 link.Add("000"); 74 Assert.AreEqual(link.Count, array.Length + 1, "Error!"); 75 76 link.Remove("ddd"); 77 Assert.AreEqual(link.Count, array.Length, "Error!"); 78 79 link.Insert(3, "222"); 80 Assert.AreEqual(link.Count, array.Length + 1, "Error!"); 81 82 link.RemoveAt(2); 83 Assert.AreEqual(link.Count, array.Length, "Error!"); 84 } 85 86 end = DateTime.Now; 87 passed = new TimeSpan(end.Ticks - start.Ticks); 88 Console.Write(String.Format("End date time:{0}{1}", end.ToString("MM/dd/yyyy HH:mm:ss"), StringUtil.CrLf)); 89 Console.Write(string.Format("spend {0} seconds, {1} milliseconds {2}", passed.Seconds, passed.Milliseconds, StringUtil.CrLf)); 90 } 91 } 92 #endregion 93 }
运行结果如下: ------- Starttest Links ------- Start Test Eastasp.Framework.Collections.OrderedTable Start date time:07-21-2005 09:58:16 End date time:07-21-2005 09:58:16 spend 0 seconds, 812 milliseconds Test Completed
Start Test Eastasp.Framework.Collections.SingleLink Start date time:07-21-2005 09:58:16 End date time:07-21-2005 09:58:17 spend 0 seconds, 765 milliseconds Test Completed Start Test Eastasp.Framework.Collections.DoubleLink Start date time:07-21-2005 09:58:17 End date time:07-21-2005 09:58:18 spend 0 seconds, 765 milliseconds Test Completed ------- End test Links -------
运行结果如下: ------- Starttest Links ------- Start Test Eastasp.Framework.Collections.OrderedTable Start date time:07-21-2005 09:58:16 End date time:07-21-2005 09:58:16 spend 0 seconds, 812 milliseconds Test Completed
Start Test Eastasp.Framework.Collections.SingleLink Start date time:07-21-2005 09:58:16 End date time:07-21-2005 09:58:17 spend 0 seconds, 765 milliseconds Test Completed Start Test Eastasp.Framework.Collections.DoubleLink Start date time:07-21-2005 09:58:17 End date time:07-21-2005 09:58:18 spend 0 seconds, 765 milliseconds Test Completed ------- End test Links -------
|
|