zoukankan      html  css  js  c++  java
  • C#名单:一个简单的实现

    C#它配备了一个泛型列表类,在很多情况下,足以。实际应用中遇到。最好的报价C#该链表,包装成自己的阶级需求。

    该名单的努力的原则,基本实现探索实施一些简单的方法。

    一个、(Node.cs文件)作为一类节点列表。它被封装在内部列表类。

    原因是客户在使用链表时不须要关注链表的节点类型。

    <span style="font-family:Courier New;">using System;
    
    namespace LinkListTrial0._2
    {
        partial class MyLinkedList<T>
        {
            class Node<DataType>:IComparable<DataType>,IEquatable<DataType>
                where DataType:IComparable
            {
                DataType data;
                Node<DataType> next;
                public Node<DataType> Next
                {
                    get
                    {
                        return this.next;
                    }
                    set
                    {
                        this.next = value;
                    }
                }
    
                public Node(DataType data)
                {
                    this.data = data;
                    this.next = null;
                }
    
                // 比較接口的实现,直接比較链表节点与数据
                public int CompareTo(DataType obj)
                {
                    DataType objData = (DataType)obj;
                    return this.data.CompareTo(objData);
                }
    
                // 相等接口的实现,直接比較链表节点与数据
                public bool Equals(DataType to_compare)
                {
                    return this.data.Equals(to_compare);
                }
    
                // 打印数据
                public override string ToString()
                {
                    // TODO:能够加一些打印链接的创意
                    return this.data.ToString();
                }
            }
        }
        
    }</span>
    

    二、(MyLinkedList.cs文件)实现简单链表的类。存放实现链表的主要逻辑。

    主要目的是实现简单链表的添加和删除逻辑。

    <span style="font-family:Courier New;">using System;
    
    namespace LinkListTrial0._2
    {
        partial  class MyLinkedList<T>
            where T:IComparable
        {
            Node<T> Head;
            public MyLinkedList()
            {
                // 在链表头部放置一个虚拟节点。简化逻辑
                Node<T> dummy = new Node<T>(default(T));
                this.Head =dummy;
            }
    
            public void AddAscend(T to_add)
            {
                Node<T> currentNode = Head;
                Node<T> nextNode;
    
                // 升序排列数据
                for ( nextNode = currentNode.Next ; nextNode!=null && nextNode.CompareTo(to_add) < 0; )
                {
                    currentNode = nextNode;
                    nextNode = currentNode.Next;
                }
    
                // 忽略反复数据
                if (nextNode!=null && nextNode.Equals(to_add))
                {
                    return;
                }
    
                
                // 插入新来的非反复数据
                Node<T> toaddNode = new Node<T>(to_add);
                currentNode.Next = toaddNode;
                toaddNode.Next = nextNode;
            }
    
            public void Delete(T to_delete)
            {
                Node<T> currentNode = Head;
                Node<T> nextNode;
    
                // 检測全部数据是否与待删除的数据相等
                for (nextNode=currentNode.Next;!( nextNode==null || nextNode.Equals(to_delete)); )
                {
                    currentNode = nextNode;
                    nextNode = currentNode.Next;
                }
                
                // 从中间删除数据
                if (nextNode != null)
                {
                    currentNode.Next = nextNode.Next;
                }
            }
    
            public void Clear()
            {
                // 清空全部数据
                this.Head.Next = null;
            }
    
            public void PrintAll()
            {
                Node<T> currentNode = Head;
                Node<T> nextNode;
    
                for (nextNode=currentNode.Next; nextNode!=null; )
                {
                    Console.WriteLine(nextNode.ToString());
                    currentNode = nextNode;
                    nextNode = currentNode.Next;
                }
            }
        }
    }</span>
    

    三、(Program.cs文件)简单的測试程序。

    <span style="font-family:Courier New;">using System;
    
    namespace LinkListTrial0._2
    {
        class Program
        {
            static void Main(string[] args)
            {
                MyLinkedList<int> list = new MyLinkedList<int>();
                list.Clear();
                list.AddAscend(1);
                list.AddAscend(6);
                list.AddAscend(1);
                list.AddAscend(3);
                list.AddAscend(4);
                list.AddAscend(2);
                list.AddAscend(5);
                list.AddAscend(6);
                list.PrintAll();
    
                Console.WriteLine("----------------------------------------------");
    
                list.Delete(6);
                list.Delete(7);
                list.PrintAll();
    
                Console.ReadLine();
    
            }
        }
    }</span>
    


    四、小结

    1、实现了简单的列表。

    2、没有考虑性能的因素。

    3、数据是相对固定的,应该依据使用情况灵活调整数据结构。

    版权声明:本文博客原创文章,博主不同意(mailto:cqwd2010@qq.com)版权所有。

  • 相关阅读:
    myBatsi调用存储过程
    Db2与Oracle的区别
    动态SQL与模糊查询
    一对多联表查询
    一对一联表查询
    025 资源的隔离与配置
    024 Yarn核心生态系统
    sift算法特征点如何匹配?
    Camera 图像处理原理分析
    基于灰度世界、完美反射、动态阈值等图像自动白平衡算法的原理、实现及效果
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4733569.html
Copyright © 2011-2022 走看看