• 链表


    1. 链表

         单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。这组存储单元既可以是连续的,也可以是不连续的。是结点为单位构成链表,其包括数据区,和地址区;

         数据区:存放当前结点的数据;

         地址区:存放下一个节点的地址;

    用C#描述单结点:

     public class ListNode<T>
        {
            public T Data { set; get; }   //数据区
            public ListNode<T> Next { set; get; } //存放下一个节点的地址区
            public ListNode(T item)
            {
                this.Data = item;
                this.Next = null;
            }
            public ListNode()
            {
                this.Data = default(T);
                this.Next = null;
            }
        }
     
    public class ListNodeMethod<T>
        {
            public ListNode<T> Head { set; get; }//单链表头
            ListNode<T> A = new ListNode<T>();
            ListNode<T> B = new ListNode<T>();
            public ListNodeMethod()
            {
                Head = null; 
            }
            /// <summary>
            /// 增加新元素到单链表末尾
            /// </summary>
            /// <param name="Item"></param>
            public void Append(T Item)
            {
                ListNode<T> foot = new ListNode<T>(Item);
               // ListNode<T> A = new ListNode<T>();
                if(Head == null)          //添加头结点
                {
                    Head = foot;
                    return;
                }
                A = Head;
                while (A.Next != null)    //单链表是”不走回头路“,所以每次增加都要从单链表的头开始找到单链表最后一个结点(最后一个结点就是Next为NULL),
                                          //然后把最后一个结点的Next设置成需增加的结点,这时要需增加的结点变身为最后一结点,他的Next为NULL。
                {
                    A=A.Next;
                }
                A.Next = foot;
            }
            public void Delete(int Index)
            {
                //删除头节点
                if(Index == 1)
                {
                    Head = Head.Next;  //将下一个结点赋值给头结点啊
                    return;
                }

                //删除非结点
                B = Head;
                int DeleteIndex = 1;
                if(A.Next != null && DeleteIndex<Index)  //删除结点如果不是头结点。从单链表头开始查询要删除结点的位置。
                    //并记录删除的前一结点值A和所要删除的结点B。因为结点B被删除了,所以结点A的Next就应该为B的Next。把结点A的Next设置为结点B的Next。
                { 
                    A = B;
                    B = B.Next;
                    DeleteIndex++;
                }
                if (DeleteIndex == Index)
                {
                    A.Next = B.Next;
                }
                  
            }
       }
  • 相关阅读:
    Libgdx 截屏功能
    Tomcat+Spring+Quartz Restart or shutdown error
    JSP 基础知识
    Git 常用命令备忘
    Java 基础知识点
    Android adb 命令的基础知识
    在 Cygwin 环境下使用 linux 命令(2)
    Libgdx Pixmap 的使用
    Android 平台开发一些基础知识
    Cygwin 安装列表
  • 原文地址:https://www.cnblogs.com/xingyuanzier/p/11076062.html
Copyright © 2020-2023  润新知