zoukankan      html  css  js  c++  java
  • 链表

    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;
                }
                  
            }
       }
  • 相关阅读:
    是河南大学的悲哀???
    装完manjaro先要卸载
    技术博客
    VIM从入门到中级教程
    HTTP中GET与POST的区别
    AngularJS 拦截器实现全局$http请求loading效果
    angular指令监听ng-repeat渲染完成后执行自定义事件方法
    icheck如何修改样式大小
    Sublime text3 代码格式化插件
    代理模式小试
  • 原文地址:https://www.cnblogs.com/xingyuanzier/p/11076062.html
Copyright © 2011-2022 走看看