当前位置:编程学习 > C#/ASP.NET >>

数据结构_1.顺序链表

所有的链表都应该有一下功能:

 (1)获取链表长度

 (2)清楚链表全部项

 (3)判断链表是否为空

 (4)判断链表是否已满

 (5)在链表末尾添加新项

 (6)在链表指定位置插入新项

 (7)在链表指定位置删除项目

 (8)根据输入项的序号返回链表项

 (9)根据输入列表项的值返回该项的序号

 在这里定义一个借口,约束所有的链表类都必须实现该借口,列表代码如下:

 

 inte易做图ce IListFunction<T>
     {
         int GetLength();
         void Clear();
         bool IsEmpty();
         bool IsFull();
         void Append(T item);
         void Insert(T item, int index);
         void Delete(int index);
         T GetItem(int index);
         int Locate(T value);
     }

 

 顺序链表实现代码如下:

   public class SequenceList<T> : IListFunction<T>
    {
        private int max;
        private int last;
        private T[] data;
        public SequenceList(int max)
        {
            data = new T[max];
            this.max = max;
            last = -1;
        }
        /// <summary>
        /// 实现索引器
        /// </summary>
        /// <param name="i"></param>
        /// <returns></returns>
        public T this[int i]
        {
            get { return data[i]; }
            set { data[i] = value; }
        }
        /// <summary>
        /// 获取顺序表长度
        /// </summary>
        /// <returns></returns>
        public int GetLength()
        {
            return last + 1;
        }
        /// <summary>
        /// 这里很奇怪,单纯只把list设置为-1可以吗?
        /// 把list设置为-1,在线性表里面存储的数据并没有清理掉,起始就是线性表里面的数据无法访问
        /// 但是线性表里面的数据还是存在的
        /// </summary>
        public void Clear()
        {
            last = -1;
        }
        /// <summary>
        /// 判断顺序表是否为空
        /// </summary>
        /// <returns></returns>
        public bool IsEmpty()
        {
            if (last == -1)
                return true;
            else
                return false;
        }
        /// <summary>
        /// 判断顺序表是否已满
        /// </summary>
        /// <returns></returns>
        public bool IsFull()
        {
            if (last == max - 1)
                return true;
            else
                return false;
        }
        /// <summary>
        /// 在顺序表末尾插入数据
        /// </summary>
        /// <param name="item"></param>
        public void Append(T item)
        {
            if (IsFull())
                throw new Exception("超出索引最大值");
            data[++last] = item;
        }
        /// <summary>
        /// 向顺序表指定位置插入新值
        /// </summary>
        /// <param name="item"></param>
        /// <param name="index"></param>
        public void Insert(T item, int index)
        {
            if (IsFull())
                throw new Exception("链表已满,无法插入插入数据");
            if (index < 0 || index > last + 2)
                throw new Exception("插入位置小于零或超出链表最大位置");
            if (index == last + 1)
            {
                data[index] = it

补充:软件开发 , C# ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,