• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

静态链表(C#实现)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

创建结构:

   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)


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
CSC时无法找到C:\ProgramFiles\MicrosoftSDKs\Windows\v6.0A\lib发布时间:2022-07-14
下一篇:
Delphi7程序调用C#写的DLL解决办法(转)发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap