C#内置链表

关于线性存储的结构,大家常提到的就是数组,然而数组虽然索引快,但是其中的插入删除操作依然比较复杂,尤其是对有序数组的操作,因而还有另一种结构,那就是链表。

关于链表的构造,大家都应该比较清楚了,我们可以使用数组去模拟链表,叫做静态链表,我们也可以用C中的结构和指针来实现链表,也可以用C++/C#中类的结构来实现一个动态链表。在C#中,我们常提到的ArrayList就是基于链表实现的(每一个节点存储数据为object类型)。

关于C#的内置链表,主要是两个类:在命名空间System.Collections.Generic中的LinkedList和LinkedListNode。下面简单介绍用这两个内置的类如何构建链表:

class Program
    {
        static void Main(string[] args)
        {
            //新建一个数据类型为string的值为Mike的节点
            LinkedListNode<string> node = new LinkedListNode<string>("Mike");
            //新建一个数据类型为string的默认链表
            LinkedList<string> names = new LinkedList<string>();
            //链表的头结点添加为node
            names.AddFirst(node);

            LinkedListNode<string> node1 = new LinkedListNode<string>("David")
                ;
            //在node节点后添加node1节点
            names.AddAfter(node, node1);

            LinkedListNode<string> node2 = new LinkedListNode<string>("Raymond");

            //在node1节点前添加node2节点
            names.AddBefore(node1, node2);

            LinkedListNode<string> aNode;
            //让栈中的aNode节点去寻找David节点,找不到则为空
            aNode = names.Find("David");
            if(aNode != null)
            {
                aNode = names.First;
            }
            while (aNode != null)
            {
                WriteLine(aNode.Value);
                aNode = aNode.Next;
            }
            WriteLine("===============");

            LinkedListNode<string> node3 = new LinkedListNode<string>("Jacky");
            LinkedListNode<string> node4 = new LinkedListNode<string>("Monkey");

            //在头结点处添加节点node3
            names.AddFirst(node3);
            //在尾节点处添加节点node4
            names.AddLast(node4);

            //aNode指向node4节点所在的链表的第一个节点
            aNode = node4.List.First;

            while(aNode != null)
            {
                WriteLine(aNode.Value);
                aNode = aNode.Next;
            }
        }
    }

由此可以看出,LinkedList和LinkedListNode组成的是一个双向链表的结构,功能十分丰富,简单易用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值