数据结构 C#版 链表

Cesium实战:从DEM数据到3D地形可视化的全流程解析 本文详细解析了从DEM数据到3D地形可视化的全流程,重点介绍了Cesium和Cesiumlab在数字高程模型(DEM)处理与地形数据转换中的应用。通过实战案例和工具对比,帮助开发者高效实现地形可视化,并分享性能优化与高级功能开发经验。 阅读详情

大家如果有什么问题,可以给我发Email: warensoft@foxmail.com

如果想了解更多关于DotNet方面的技术资料,文章以及视频,请到本团队的主页:www.warensoft.cn

 

下面是C#版链表的实现过程
 
分为两个类:
1.   CSArrayListNode 类,用于表示一个结点
2.   CSArrayList, 用于表示链表本身
下面是这两个类的视图
 
大家可以根据视图得到这两个类的基本结构 ,代码中有详细的注释.
大家也可以从下 面的地址中下载已经作好的代码.
如果有什么问题可以发送以下EMAIL到我们的工作室,我们会在最短的时间内给您解答
warensoft@foxmail.com 或 warensoft@sina.com
 
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
 
namespace 链表
{
 
    ///<summary>
    /// 用于表示链表的一个结点
    ///</summary>
    public class CSArrayListNode
    {
        private object element;
        ///<summary>
        /// 当前结点中的元素值
        ///</summary>
        public object Element
        {
            get { return element; }
            set { element = value; }
        }
 
        private CSArrayListNode nextNode;
        ///<summary>
        /// 该结结点的下一个结点的引用
        ///</summary>
        public CSArrayListNode NextNode
        {
            get { return nextNode; }
            set { nextNode = value; }
        }
 
    }
    ///<summary>
    /// 用于表示链表
    ///</summary>
    public class CSArrayList
    {
        CSArrayListNode firstNode;
        int count;bool isReadOnly = false;
        ///<summary>
        /// 获取 CSArrayList 中实际包含的元素数。
        ///</summary>
        public int Count
        {
            get
            {
                return this.count;
            }
        }
 
      
 
        ///<summary>
        /// 将对象添加到 CSArrayList 的结尾处。
        ///</summary>
        ///<param name="Item"> 要添加到 CSArrayList 的末尾处的 Object。该值可以为 空引用. </param>
        public void Add(object Item)
        {
            // 第一次加入元素
            if (this.firstNode ==null )
            {
                this.firstNode = new CSArrayListNode();
                this.firstNode.Element = Item;
            }
            // 非第一次加入元素
            else
            {
                CSArrayListNode tmpnode = this.firstNode ;
                // 通过循环找到最后一个结点
                while (true)
                {
                   
                    // 如果该结点为空,则将新值插入该链表
                    if ( tmpnode.NextNode==null )
                    {
                        tmpnode.NextNode = new CSArrayListNode();
                        tmpnode.NextNode.Element = Item;
                        break;
                    }
                    tmpnode = tmpnode.NextNode;
                }
            }
            // 链表长度增加1
            this.count++;
        }
 
        ///<summary>
        /// 从 CSArrayList 中移除所有元素。
        ///</summary>
        public void Clear()
        {
            // 最好将所有结点清空
            this.firstNode = null;
        }
 
        ///<summary>
        /// 确定某元素是否在 CSArrayList 中。
        ///</summary>
        ///<param name="item"> 要在 ArrayList 中查找的 Object。该值可以为 空引用 </param>
        ///<returns> 如果在 CSArrayList 中找到 item,则为 true;否则为 false。 </returns>
        public bool Contains(object item)
        {
            CSArrayListNode tmpnode = this.firstNode ;
            while (true)
            {
                if (tmpnode ==null )
                {
                    return false;
                }
                if (tmpnode .Element .Equals (item))
                {
                    return true;
                }
                tmpnode = tmpnode.NextNode;
            }
        }
 
        ///<summary>
        /// 搜索指定的 Object,并返回整个 ArrayList 中第一个匹配项的从零开始的索引。
        ///</summary>
        ///<param name="value"> 要在 ArrayList 中查找的 Object。 </param>
        ///<returns> 如果在整个 ArrayList 中找到 value 的第一个匹配项,则为该项的从零开始的索引;否则为 -1。 </returns>
        public int IndexOf(object value)
        {
            CSArrayListNode tmpnode = this.firstNode;
            int index = 0;
            while (true)
            {
                // 如果找到最后一个还找不到,则返回-1
                if (tmpnode == null)
                {
                    return -1;
                }
                // 否则返回索引号
                if (tmpnode.Element.Equals(value ))
                {
                    return index ;
                }
                tmpnode = tmpnode.NextNode;
                index++;
            }
        }
 
        ///<summary>
        /// 将元素插入 ArrayList 的指定索引处。
        ///</summary>
        ///<param name="index"> 从零开始的索引,应在该位置插入 value。 </param>
        ///<param name="value"> 要插入的 Object。 </param>
        public void Insert(int index, object value)
        {
            // 如果索引号大于该链表的长度,则不作为
            if (index>this.count )
            {
                return;
            }
            // 如果索引号是0,则直接将该值插入第一个结点
            if (index == 0)
            {
                CSArrayListNode node = new CSArrayListNode();
                node.Element = value;
                node.NextNode = this.firstNode;
                this.firstNode = node;
                this.count++;
                return ;
 
            }
            CSArrayListNode tmpnode = this.firstNode;
            int index1 =0;
            while (true)
            {
                if (tmpnode == null)
                {
                    return ;
                }
                // 插入新值,这里要注意结点是如何交换的
                //C# 的类名就是引用,这一点类似于C++中的指针
                if (index ==(index1+1))
                {
                    CSArrayListNode node = new CSArrayListNode();
                    node.Element = value;
                    node.NextNode = tmpnode.NextNode;
                    tmpnode.NextNode = node;
                    this.count++;
                    return ;
 
                }
                tmpnode = tmpnode.NextNode;
                index1++;
            }
        }
 
        ///<summary>
        /// 从 ArrayList 中移除特定对象的第一个匹配项。
        ///</summary>
        ///<param name="value"> 要从 ArrayList 移除的 Object。 </param>
        public void Remove(object value)
        {
           
            if (this.firstNode .Element .Equals (value ))
            {
                this.firstNode = this.firstNode.NextNode;
                this.count--;
                return;
            }
            int index = 0;
            CSArrayListNode tmpnode = this.firstNode;
            while (true)
            {
                if (tmpnode.NextNode ==null )
                {
                    return ;
                }
                if (tmpnode .NextNode .Element .Equals (value ))
                {
                    tmpnode.NextNode = tmpnode.NextNode.NextNode;
                    this.count--;
                    return;
                }
                tmpnode = tmpnode.NextNode;
                index++;
            }
        }
 
        ///<summary>
        /// 移除 ArrayList 的指定索引处的元素。
        ///</summary>
        ///<param name="index"> 要移除的元素的从零开始的索引。 </param>
        public void RemoveAt(int index)
        {
            if (index > this.count )
            {
                return;
            }
            if (index==0)
            {
                this.firstNode = this.firstNode.NextNode;
                this.count--;
                return;
            }
            int index1 = 0;
            CSArrayListNode tmpnode = this.firstNode;
            while (true)
            {
                if (index1 ==(this.count -1))
                {
                    return;
                }
                if (index ==(index1 +1))
                {
                    tmpnode.NextNode = tmpnode.NextNode.NextNode;
                    this.count--;
                    return;
                }
                tmpnode = tmpnode.NextNode;
                index1++;
            }
        }
 
        public object this[int index]
        {
            get
            {
                if (index > this.count - 1)
                {
                    return null ;
                }
                CSArrayListNode tmpnode = this.firstNode;
                for (int i = 0; i < index; i++)
                {
                    tmpnode = tmpnode.NextNode;
                }
                return tmpnode.Element;
            }
            set
            {
                if (index > this.count - 1)
                {
                    return;
                }
                CSArrayListNode tmpnode = this.firstNode;
                for (int i = 0; i < index; i++)
                {
                    tmpnode.NextNode = tmpnode.NextNode;
                }
                tmpnode.Element=value ;
            }
        }
    }
}
【WorkBuddy专栏68】HY3绕路部署vsDS4直击根因——一次真实踩坑揭露两个AI模型的推理差距 阅读详情

相关推荐

大白话讲解Numpy中什么是一维、二维、三维数组,以及5种创建方式

NumPy中提供了多种创建数组的方式,其中最基本的方式就是通过array()函数创建数组在使用该函数时直接传入列表或元组即可。 通过array()函数分别创建一维数组、二维组和三维数组,那么什么是维度呢?一维、二维、三维有什么区别? 1、什么是维度? 维度可以理解为描述数据的一种 “方向” 或者 “层次”。在数组中,维度的数量决定了我们需要用多少个索引来访问一个元素 2、一维、二维、三维的区别? (1)一维:一维数组就像是一条直线上排列的一组数据,例如: a = np.array([1, 2

1362

C#实现链表

    今天受一个帖子的刺激,再次复习起了数据结构与算法,那本《数据结构与算法(java版)》我还剩图和高级排序的几章没看,工作上也没我的事需要处理,就用C#重新写了一遍链表结构,权作复习。 定义List接口:    public  interface List     {         bool IsEmpty();         void Unshift(Object obj);    ...

庄周梦蝶 321

生态学家都在用的MixSIAR:用R语言搞定稳定同位素混合模型(从数据整理到结果解读)

本文详细介绍了生态学家常用的MixSIAR工具,通过R语言实现稳定同位素混合模型分析,从数据整理到结果解读全流程。文章涵盖环境准备、模型构建、参数设置、运行诊断及可视化等关键步骤,帮助研究者科学分析河口鱼类食物来源,适用于生态学研究和湿地保护政策制定。

weixin_28683065的博客 437

@interface List

https://www.jianshu.com/p/e31c20c04e8e我在看@Empty注解的时候看到有这样的操作:public @interface NotEmpty { String message() default "{org.hibernate.validator.constraints.NotEmpty.message}"; Class&lt;?&gt;[] gro...

来日可期的博客 2313

Red Hat Enterprise Linux 9.2

安装Red Hat Enterprise Linux 9.2

zhurobert的博客 941

SAR ADC设计——SAR Logic原理

SAR ADC设计——SAR Logic原理 参考:集成电路设计实践 SAR ADC 清华大学 李福乐 文章目录SAR ADC设计——SAR Logic原理一. Overview二. TSPC(True Single Phase Clock)三. SC_Gen(Sequential Control Generator)四. LATCH_Dynamic五. 时序控制逻辑总结六. SW产生七. DO产生八. GT产生九. SAR Logic模块总结 一. Overview 输入:CKC,CompB,SAMPL

夏风喃喃的博客 1万+

c#链表

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp3 { class Program { static void Main(string[] ...

guard_hao的博客 413

用R语言做WGCNA分析全步骤一(附代码解读)【转载】

代码逐句分析一、文章来源二、基因共表达网络构建及模块识别1.数据导入、清洗及预处理2.检查过度缺失值和离群样本3.聚类做离群样本检测4.载入临床特征数据三、自动构建网络及识别模块1.确定合适的软阈值:网络拓扑分析2.一步构建网络和识别模块 一、文章来源 初学WGCNA,觉得博主的代码写的很不错,但其中很多代码在第一遍看的时候有很多地方不理解,后查阅了很多资料,终于看明白了,于是写了一篇笔记,记录自己的学习心得,有不准确的地方,还望各位大佬们不吝赐教~ 原文链接:WGCNA简明指南 二、基因共表达网络构建及模

qq_43138237的博客 2万+

数据结构之双向链表--C#版

面试考察频率:⭐⭐⭐⭐ 什么是双向链表? 在单向链表的前提下,增加了前驱指针,可以跟轻松的访问一个节点的前驱与后继节点 双向链表优缺点? 优点:可以更便捷的访问一个节点的前驱与后继。 缺点:需要占用更多一些的内存。删除节点操作变得更加复杂。 如何来实现? 构建思路如下 当前节点的next指向下一个节点。当前节点的pre指向上一个节点如此循环。(注:头节点的pre始终指向最后一个节点,为了方便遍...

新手小白的博客 614

【MTK平台】【wpa_supplicant】关于wpa_supplicant/p2p_supplicant.c文件的介绍

本文主要介绍external/wpa_supplicant_8/wpa_supplicant/p2p_supplicant.c 这个文件这个文件里面有个核心的方法就是。

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 724

基于ESM3微调的抗菌肽生成器:技术方案与实现

基于ESM3微调的抗菌肽生成器:技术方案与实现 摘要 本文提出了一种基于ESM3蛋白质语言模型的抗菌肽生成框架,采用两阶段训练策略:先在151万肽序列上预训练,再在1.3万抗菌肽数据上微调。模型能够生成具有合理长度分布、低重复率且高新颖性的抗菌肽序列。文章详细介绍了数据预处理流程、模型架构设计、训练策略及评估方法,为抗菌肽的理性设计提供了有效的计算工具。实验结果表明,该方法生成的抗菌肽序列在保持生物活性的同时具有较高的结构多样性。 关键词:抗菌肽设计;蛋白质语言模型;ESM3;深度学习;序列生成

huanghm88的专栏 175

数据结构之单链表(C#版)

数据结构之单链表(C#版)简介与数组的区别1.内存分布2.数据的获取代码实现节点类(Node.cs)链表类(LinkedList.cs)增加节点删除节点修改节点值查询节点自定义ToString方法总结 简介 数据结构和算法是程序员的内容心法,正好,我也刚刚学完一个系列的数据结构和算法的课程,那就趁热打铁,先给大家分享一下数据结构之单链表,那么什么是单链表呢? 1.我用灵魂画了一下下面这幅图,来大致...

jmelzc的博客 595

锁的艺术:Java并发中的常用锁策略与实践

对java锁相关内容进行整理分析:乐观锁 VS 悲观锁+自旋锁 VS 适应性自旋锁+无锁 VS 偏向锁 VS 轻量级锁 VS 重量级锁+公平锁 VS 非公平锁+可重入锁 VS 非可重入锁+独享锁 VS 共享锁

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 171万+

数据结构-链表C#版实现

双向链表: using System; namespace DS_ALGCode { /// <summary> /// 双向链表 /// </summary> public class S_LinkedList { private Node Head = null; private Node Tail = null; private Node Cur = null; priva

Ben的专栏 364

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

C#版的数据结构(对链表的操作)

我们一般只是学过C/C++的数据结构,想必学C#的学生会疑惑,为什么C#没有数据结构呢,那我来告诉你,其实C#也是有数据结构的,只不过我们不了解罢了,经过我半天的编程,终于把C#的数据结构写出来了,也大大增加了我对数据结构的理解,在这里提供出来,共享学习,共同进步!   using System; using System.Collections.Generic; using System

学无止境的专栏 7092

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: wa_lab C# .net ado.net 数据访问层 组件 (有原代码)
下一篇: 数据结构 C#版 链表 加强版 支持 foreach语句
warensoft
博客等级 码龄19年 21粉丝 22原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值