hello

线性表的实现

实现线性表的基本操作,以c#接口的形式表示线性表,接口中的方法成员表示基本操作。为了,使线性表对任何数据类型都适用,数据元素的类型都使用泛型的类型参数。在实际创建线性表时,元素的实际类型可以用应用程序中任何方便的数据类型来代替,比如用简单的整型或者用户自定义的更复杂的类型来代替。

线性表的接口如下所示:

 /// <summary>
    /// 线性表接口,使用泛型
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public interface IListDS<T>
    {
        int GetLength();//求长度
        void Clear();//清空操作
        bool IsEmpty();//判断线性表表是否为空
        bool IsFull();//判断顺序表是否为满
        void Append(T item);//附加操作
        void Insert(T item, int i);//插入操作
        T Delete(int i);//删除操作
        T GetElem(int i);//去元素
        int Locate(T value);//按值查找 
        void showDataArray();//返回数组
        /// <summary>
        /// 将线性表元素进行倒置
        /// </summary>
        void Reverse();

    }

线性表类SeqList<T>的实现如下:

public class SeqList<T> : IListDS<T>
    {
        private int maxsize;//线性表的容量
        private T[] data;//数组,用于存储顺序表中的数据元素
        private int last;//指示顺序表最后一个元素的位置

        /// <summary>
        /// 索引器
        /// </summary>
        /// <param name="index"></param>
        /// <returns></returns>
        public T this[int index]
        {
            get
            {
                return data[index];
            }
            set
            {
                data[index] = value;
            }
        }

        /// <summary>
        /// 最后一个元素的位置属性
        /// </summary>
        public int Last
        {
            get
            {
                return last;
            }
        }
        /// <summary>
        /// 容量属性
        /// </summary>
        public int Maxsize
        {
            get
            {
                return maxsize;
            }
            set
            {
                maxsize = value;
            }
        }

        public SeqList(int size)
        {
            data = new T[size];
            maxsize = size;
            last = -1;
        }

        public int GetLength()
        {
            return last + 1;
        }

        public void Clear()
        {
            last = -1;

        }

        public bool IsEmpty()
        {
            if (last != -1)
                return false;
            return true;
        }

        public bool IsFull()
        {
            if (last == maxsize - 1)
                return true;
            else
                return false;
        }


        public void Append(T item)
        {
            if (IsFull())
            {
                Console.WriteLine("List is full");
                return;
            }
            else
            {
                data[++last] = item;
            }

        }

        public void Insert(T item, int i)
        {
            if (IsFull())
            {
                Console.WriteLine("List is full");
                return;
            }
            else if (i < 1 || i > last + 2)
            {
                Console.WriteLine("Position is error");
                return;
            }
            if (i == last + 2)//在顺序表的表尾插入元素
            {
                data[i-1] = item;
            }
            else
            {
                //在其他位置插入元素
                //元素移动
                for (int j = last; j >= i - 1; --j)
                {
                    data[j + 1] = data[j];
                }
                //将新的元素插入第i个位置上
                data[i-1] = item;
            }
            //修改表长
            ++last;
        }

        public T Delete(int i)
        {
            T tmp = default(T);
            //判断表是否为空
            if (IsEmpty())
            {
                Console.WriteLine("List is empty");
                return tmp;
            }
            if (i < 1 || i > last + 1)
            {
                Console.WriteLine("Position is error!");
                return tmp;
            }
            //删除的是最后一个元素
            if (i == last + 1)
            {
                tmp = data[last--];
                data[i-1] = default(T);
                return tmp;
            }
            else//删除的不是最后一个元素
            {
                tmp = data[i - 1];
                for (int j = i-1; j <=last; ++j)
                {
                    data[j] = data[j + 1];
                }
            }
            --last;
            return tmp;
        }

        public T GetElem(int i)
        {
            if (IsEmpty() || i < 1 || i > last + 1)
            {
                Console.WriteLine("List is empty or position is error!");
                return default(T);
            }
            return data[i-1];
        }

        public int Locate(T value)
        {
            if (IsEmpty())
            {
                Console.WriteLine("List is empty!");
                return -1;
            }
            int i = 0;
            for ( i = 0; i <= last; i++)
            {
                if(value.Equals(data[i]))
                break;
            }
            if(i>last)
                return -1;
            return i;

        }


        public void showDataArray()
        {
            Console.WriteLine("dataArray item is:");
            foreach (T i in data)
            {
                Console.Write(i + " ");
            }
            Console.WriteLine();
        }


       public void Reverse()
       {
           T tmp = default(T);
           int len = GetLength()-1;
           for (int i = 0; i<=len / 2; ++i)
           {
               tmp = data[i];
               data[i] = data[len - i];
               data[len - i] = tmp;
           }
       }

    }

主函数简单的调用:

 static void Main(string[] args)
        {
            IListDS<int> list = new SeqList<int>(5);

            list.Append(1);
            list.Append(2);
            list.Append(3);
            list.Append(4);
            list.Append(5);
            //list.Append(6);
           // int length = list.GetLength();
           // Console.WriteLine("the length is:"+length);
           // list.dataArray();
           // Console.WriteLine("Insert array operate");
           // list.Insert(4, 4);
           // Console.WriteLine("After insert the length is:" + list.GetLength());
           // list.dataArray();
           // Console.WriteLine("Delete operate");
           // Console.WriteLine("After Delete the length is:" + list.GetLength());
           //int d= list.Delete(3);
           //Console.WriteLine("删除的元素为:"+d);
           // list.dataArray();

            list.showDataArray();
            list.Reverse();
            list.showDataArray();
            Console.ReadKey();
        }

 

 

 

posted @ 2012-10-08 09:35  B追风少年  阅读(229)  评论(0编辑  收藏  举报

hello too