当前位置: 首页 > wzjs >正文

遵义网站制作外包棋牌游戏网站模板

遵义网站制作外包,棋牌游戏网站模板,网站建设谈单技巧,安阳seo优化今天来介绍一下LinkedList<T>的内部结构&#xff0c;说不多说直接开始。 内部数据 LinkedList是一个双向链表结构的容器&#xff0c;其内部为非连续的内存空间。LinkedList包含的主要成员示例如下&#xff1a; //起始LinkedListNode节点 internal LinkedListNode<T&g…

        今天来介绍一下LinkedList<T>的内部结构,说不多说直接开始。

内部数据

        LinkedList是一个双向链表结构的容器,其内部为非连续的内存空间。LinkedList包含的主要成员示例如下:

//起始LinkedListNode节点
internal LinkedListNode<T>? head;
//LinkedList中包含的数据数量
internal int count;
//版本号,用于检测LinkedList是否被修改
internal int version;public sealed class LinkedListNode<T>
{// 存储的数据对象internal T item;	//下一个LinkedListNode节点internal LinkedListNode<T>? next;	//上一个LinkedListNode节点internal LinkedListNode<T>? prev;
}

        LinkedListNodeLinkedList中一个重要的数据结构,其中包含了三个成员变量:

  • T item:数据对象,item是实际存储数据的地方。
  • LinkedListNode<T>? next:指向下一个LinkedListNode的节点,没有则为null。
  • LinkedListNode<T>? prev:指向上一个LinkedListNode的节点,没有则为null。

        LinkedListNode<T>? head存储的是起始LinkedListNode节点。

        int count记录的是LinkedList中存储数据的数量。

        int version记录的是版本号信息,用于检测LinkedList是否被修改,每次LinkedList修改时version会加1处理。

数据操作

        添加数据

        LinkedList有多种添加数据的方式,方法如下:

  • AddFirst(T value):在列表头部添加数据。
  • AddLast(T value):在列表尾部添加数据。
  • AddAfter(LinkedListNode<T> node, T value):在指定节点前面添加数据。
  • AddBefore(LinkedListNode<T> node, T value):在指定节点后面添加数据。

        添加数据的过程为先创建一个新的LinkedListNode对象,然后根据不同的方法,将LinkedListNode对象插入到指定节点的前面或者后面。这里以AddLast举例,示例代码如下:

public LinkedListNode<T> AddLast(T value)
{LinkedListNode<T> result = new LinkedListNode<T>(this, value);if (head == null){InternalInsertNodeToEmptyList(result);}else{InternalInsertNodeBefore(head, result);}return result;
}private void InternalInsertNodeBefore(LinkedListNode<T> node, LinkedListNode<T> newNode)
{newNode.next = node;newNode.prev = node.prev;node.prev!.next = newNode;node.prev = newNode;version++;count++;
}

        这里讲解一下InternalInsertNodeBefore方法,由于LinkedList是双向链表,在调用AddLast方法在尾部添加数据时,newNode.next的下一个节点也就是head节点,head的上一个节点会被设置为newNode.prev对象。略微有点绕,不过简单推导一下基本可以理解。

        移除数据

        LinkedList同样有多种移除数据的方法,示例如下:

  • Remove(T value):移除指定数据对象,当存在多个相同数据时,会移除第一个相同的数据。
  • Remove(LinkedListNode<T> node):移除指定节点。
  • RemoveFirst():移除第一个节点。
  • RemoveLast():移除最后一个节点。

        几个方法移除数据的过程基本相同,这里以Remove(T value)示例,示例代码如下:

public bool Remove(T value)
{LinkedListNode<T>? node = Find(value);if (node != null){InternalRemoveNode(node);return true;}return false;
}internal void InternalRemoveNode(LinkedListNode<T> node)
{if (node.next == node){head = null;}else{node.next!.prev = node.prev;node.prev!.next = node.next;if (head == node){head = node.next;}}node.Invalidate();count--;version++;
}

        移除数据的主要过程在InternalRemoveNode(LinkedListNode<T> node)方法中,其主要操作是将移除对象的前后节点进行重行赋值,小伙伴可以自己推导一下。

        遍历数据

        先来介绍一下用foreach遍历LinkedList,foreach是从头到尾逐个遍历LinkedList。需要注意的是遍历过程中不能对LinkedList进行插入/删除操作,不然会抛出异常。示例代码如下:

LinkedList<string> list = new LinkedList<string>();
// 添加元素...foreach (string item in list)
{Console.WriteLine(item);
}

        其次是用for循环遍历LinkedList,for循环的好处在于可以正向遍历,也可以反向遍历,并且在遍历过程中可以对LinkedList进行插入/删除操作。示例代码如下:

// 正向遍历
for (LinkedListNode<string> node = list.First; node != null; node = node.Next)
{Console.WriteLine(node.Value);
}// 反向遍历
for (LinkedListNode<string> node = list.Last; node != null; node = node.Previous)
{Console.WriteLine(node.Value);
}

相关文档链接

LinkedList<T> 类官方文档:https://learn.microsoft.com/zh-cn/dotnet/api/system.collections.generic.linkedlist-1?view=net-9.0

LinkedList源码地址:https://github.com/dotnet/runtime/blob/main/src/libraries/System.Collections/src/System/Collections/Generic/LinkedList.cs


文章转载自:

http://lIb0eoIq.dxtxk.cn
http://SBhGBsLu.dxtxk.cn
http://FlcCXHfv.dxtxk.cn
http://tfgvcVP3.dxtxk.cn
http://C7l4hXnK.dxtxk.cn
http://XGN4xbnt.dxtxk.cn
http://C22UlNzW.dxtxk.cn
http://NMlE8Vxk.dxtxk.cn
http://MRqVXIGK.dxtxk.cn
http://4Zd95f0q.dxtxk.cn
http://XPd70TSE.dxtxk.cn
http://XtE2b8Er.dxtxk.cn
http://vGD6dh9k.dxtxk.cn
http://4mX4wMdZ.dxtxk.cn
http://5ZVMSb30.dxtxk.cn
http://mhLg8kmi.dxtxk.cn
http://eJhSXLZc.dxtxk.cn
http://wxNgBYvU.dxtxk.cn
http://72i5DrUb.dxtxk.cn
http://UK5N5A1G.dxtxk.cn
http://riVj3YhE.dxtxk.cn
http://pXTfQlq6.dxtxk.cn
http://5Qu17hS5.dxtxk.cn
http://SB5ObRQG.dxtxk.cn
http://6BXTjCfH.dxtxk.cn
http://6dhKyl4o.dxtxk.cn
http://7AMkLMfQ.dxtxk.cn
http://EHeXJs5V.dxtxk.cn
http://S5c1VtQt.dxtxk.cn
http://Zpf1WrwP.dxtxk.cn
http://www.dtcms.com/wzjs/708137.html

相关文章:

  • 网站开发量微信小程序里的网站怎么做
  • 电子商务网站建设期末题库河南教育平台网站建设
  • 龙岩任做网站的哪几个比较好网上做任务的网站
  • 购买网站模板怎么用建设部标准规范网站
  • 河北省保定市唐县城乡建设网站携程网站联盟
  • 电子商务网站的定义沈阳建设工程信息网举报
  • 做相册的网站(网易虚拟机wordpress教程
  • 重庆有哪些做网站 小程序的太原网站建设外包须知传媒
  • 免费网站是如何盈利的建设网站职业证书
  • 看电视剧免费的网站做刷网站流量犯法吗
  • Dedecms手机网站源码上海企业营销型网站建设
  • 最新网站源码冀州网站建设代理
  • 医院网站开发多少钱品牌的宣传及推广
  • 用asp做网站出现空白推广计划a设置了短语否定匹配关键词为招聘
  • html网站开发图片素材wordpress主页定制
  • 用asp做网站登录页面杭州公司注册代理中介
  • 旅游网站建设备案做商城网站要什么证件
  • 广东省建设工程网站网站建设公司新报价
  • 网站客户体验如何设计网站风格
  • 网站建设设计合同书做公司网站需要什么手续
  • 怎样用自己的服务器做网站淘宝购物平台
  • 北京西站停车场收费标准爱妮微如何做网站链接的网址
  • 石家庄新钥匙网站erp实施顾问
  • 哔哩哔哩高能建站做彩票网站网址
  • 免费网站建设 免备案网站服务器错误怎么办
  • 电商食品网站建设医疗网站设计风格
  • 专门做护理PDCA的网站visual c 网站开发
  • 全国建设项目竣工验收公示网站怎样实现wordpress订单提醒功能
  • 公益网站设计做机械的老板都看什么网站
  • 攀枝花网站建设wordpress公司官网主题