zoukankan      html  css  js  c++  java
  • 静态链表(C#实现)

    创建结构:

       public class Link
        {
           public string data;
           public int cur;
        }

    创建:

       public class Link_list
        {
            private int _length = 0;
            public int Length
            {
                get { return _length; }
                set { _length = value; }
            }
            static readonly int MAXSIZE = 10;
            public static Link[] _arry;
            public Link_list()
            {
                _arry = new Link[MAXSIZE];
                Init();
            }
            /// <summary>
            /// 初始化静态链表
            /// </summary>
            private void Init()
            {
                for (int i = 0; i < MAXSIZE; i++)
                {
                    _arry[i] = new Link();
                    _arry[i].cur = i + 1;
                }
                _arry[MAXSIZE - 1].cur = 1;
            }
            /// <summary>
            /// 返回第一个可用的位置
            /// </summary>
            /// <returns></returns>
            private int Mallo_()
            {
                int i = _arry[0].cur;
                if (_arry[0].cur > 0)
                {
                    _arry[0].cur = _arry[i].cur;
                }
                return i;
            }
            /// <summary>
            /// 添加一个数据项
            /// </summary>
            /// <param name="l"></param>
            public void Add(Link l)
            {
              int temp=  Mallo_();
              _arry[temp].data = l.data;
              _arry[temp].cur = _arry[0].cur;
              addLength();
            }
            private void addLength()
            {
                _length++;
            }
            private void delteLength()
            {
                _length--;
            }
            /// <summary>
            /// 在指定位置前插入数据
            /// </summary>
            /// <param name="weiz">指定位置</param>
            /// <param name="l">要插入的数据</param>
            public void Insert(int weiz, Link l)
            {
                if (weiz > _arry[0].cur)
                {
                    return;
                }
                int free_Length = Mallo_();
                int temp = MAXSIZE - 1;
                for (int i = 1; i <= weiz - 1; i++)
                {
                    temp = _arry[temp].cur;
                }
                l.cur = _arry[temp].cur;
                _arry[temp].cur = free_Length;
                _arry[free_Length] = l;
                addLength();
            }
            public void Delete(int weiz)
            {
                if (weiz >= _arry[0].cur)
                {
                    return;
                }
                int k = _arry[MAXSIZE-1].cur;
                for (int i = 1; i <weiz-1; i++)
                {
                    k = _arry[k].cur;
                }
                //k=1
                //假如我要删除第2个
                //temp=2
                int tmep = _arry[k].cur;//得到第2个的下一个
                _arry[k].cur = _arry[tmep].cur;
                _free(tmep);
                delteLength();
            }
            private void _free(int i)
            {
                _arry[i].cur = _arry[0].cur;
                _arry[i].data = null;
                _arry[0].cur = i;
            }
        }

    使用:

            static void Main(string[] args)
            {
                Link_list ls = new Link_list();
                Link l1 = new Link() { data="小花"};
                Link l2 = new Link() { data = "小白" };
                Link l3 = new Link() { data = "小虎" };
                Link l4 = new Link() { data = "小涛" };
                Link l5 = new Link() { data = "小智" };
                ls.Add(l1);
                ls.Add(l2);
                
                ls.Add(l3);
             
                foreach (var item in Link_list._arry)
                {
                    Console.WriteLine(string.Format("数据:{0},游标:{1}", item.data, item.cur));
                }
                Console.WriteLine("--------------------------------------------------------------");
                //ls.Delete(2);
                ls.Insert(2, l4);
                foreach (var item in Link_list._arry)
                {
                    Console.WriteLine(string.Format("数据:{0},游标:{1}",item.data,item.cur));
                }
                //ls.Insert(1, l1);
                Console.Read();
            }

    优点:

      插入时不需要大幅度的移动数组元素

    缺点:

      修改时复杂度为0(n)

    Hold on, everything is possible.
  • 相关阅读:
    【转】一个java处理JSON格式数据的通用类
    Oracle数据类型Clob读取
    【网摘】Ibatis调用存储过程
    jQuery实现页面模块拖拽与模块自定义效果.rar
    jspSmartUpload上传下载全攻略
    【转】JSON 入门指南
    【摘选自江苏移动网上营业厅】JS实现无间断向上滚动marquee
    Oracle用户解锁
    js 蒙版进度条(图片)
    java文件夹遍历
  • 原文地址:https://www.cnblogs.com/student-note/p/6270946.html
Copyright © 2011-2022 走看看