线性表( 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
/**/ ///
1<summary>
214  /// Summary description for CollectionTest.
315  /// </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
/**/ ///
1<summary>
214  /// Summary description for CollectionTest.
315  /// </summary>
16
[TestFixture]
17
public class CollectionTest:ITest
18
{
19
public CollectionTest()
20
{
21
}
22 
23
[Test]
24