首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 實作循序表 (2) - 完整泛型實作程式碼

     編輯:關於C語言

SeqList<T> 完整實作

using System;
namespace DataStructures.Lists
{
    public class SeqList<T> : IListDS<T> where T : IComparable<T>
    {
        #region Fields
        T[] data;      // 陣列儲存元素
        int maxSize;   // 最大容量
        int last;      // 最後一個元素索引
        #endregion

        #region Properties
        public T this[uint index] { get => data[index]; set => data[index] = value; }
        public int MaxSize { get => maxSize; set => maxSize = value; }
        #endregion

        #region Constructors
        public SeqList() : this(20) { }
        public SeqList(int size)
        {
            data = new T[size];
            maxSize = size;
            last = -1;
        }
        #endregion

        #region Methods
        public virtual bool IsFull => last == maxSize - 1;
        
        public override string ToString()
        {
            for (int i = 0; i <= last; ++i) Console.WriteLine(data[i]);
            return "OK";
        }
        
        public virtual int SeqSearch(T key)
        {
            Insert(key, 1); // 哨兵查找法
            int i = 0;
            for (i = last; !key.Equals(data[i]); --i) ;
            return i;
        }
        #endregion

        #region IListDS<T> Members
        public virtual void Append(T item)
        {
            if (last == maxSize - 1) Console.WriteLine("List is full");
            else data[++last] = item;
        }

        public virtual void Insert(T item, int index)
        {
            if (last == maxSize - 1) { Console.WriteLine("List is full"); return; }
            if (index < 1 || index > last + 2) { Console.WriteLine("Position is error!"); return; }
            
            if (index == last + 2) data[index - 1] = item; // 尾部插入
            else
            {
                for (int i = last; i >= index - 1; --i) data[i + 1] = data[i]; // 後移
                data[index - 1] = item;
                ++last;
            }
        }

        public virtual T Delete(int index)
        {
            T result = default(T);
            if (last == -1) { Console.WriteLine("List is empty"); return result; }
            if (index < 1 || index > last + 1) { Console.WriteLine("Position is error!"); return result; }
            
            if (index == last + 1) result = data[last--]; // 刪除尾部
            else
            {
                result = data[index - 1];
                for (int j = index; j <= last; ++j) data[j - 1] = data[j]; // 前移
                --last;
            }
            return result;
        }

        public virtual T GetElement(int index)
        {
            T result = default(T);
            if (last == -1 || index < 1 || index > last + 1) 
            { Console.WriteLine("List is empty / Position error"); return result; }
            return data[index - 1];
        }

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

        public virtual void Update(T newItem, int index)
        {
            if (last == -1) Console.WriteLine("List is Empty");
            else if (index < 1 || index > last + 1) Console.WriteLine("Position is error!");
            else data[index - 1] = newItem;
        }

        public virtual void Replace(T newItem, T oldItem)
        {
            if (last == -1) { Console.WriteLine("List is Empty"); return; }
            int i = 0;
            for (; i <= last; ++i) if (oldItem.Equals(data[i])) data[i] = newItem;
            if (i > last) Console.WriteLine("List have no oldItem");
        }
        #endregion

        #region IDS<T> Members
        public virtual int Count => last + 1;
        public virtual void Clear() => last = -1;
        public virtual bool IsEmpty => last == -1;
        #endregion
    }
}

剛完成,尚未測試。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved