职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 2738|回复: 1

Snake.Net中的线性表

[复制链接]
梦段桥 发表于 2007-9-2 20:42 | 显示全部楼层 |阅读模式
线性表(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中的线性表





1namespace 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.GetType().FullName, StringUtil.CrLf);
44        OutputLink(links);
45        Console.Write(\"Test Completed{1}{1}\", links.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 -------






1namespace 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.GetType().FullName, StringUtil.CrLf);
44        OutputLink(links);
45        Console.Write(\"Test Completed{1}{1}\", links.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 -------
蓝色梦幻 发表于 2007-9-3 13:12 | 显示全部楼层
要要好好学习一下的东西
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-15 11:08 , Processed in 0.129516 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表