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

C# 資料結構:線性表(序列表)泛型實作

     編輯:關於C語言

SeqList<T> 完整實作

public class SeqList<T> : IListDS<T>
{
    int maxsize; T[] data; int last = -1;

    public T this[int index] { get => data[index]; set => data[index] = value; }
    public int Last => last;
    public int MaxSize { get => maxsize; set => maxsize = value; }

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

    public int GetLength() => last + 1;
    public void Clear() => last = -1;
    public bool IsEmpty() => last == -1;
    public bool IsFull() => last == maxsize - 1;

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

    public void Insert(T item, int i) // i 為 1-based 位置
    {
        if (IsFull()) { Console.Write("List is full"); return; }
        if (i < 1 || i > last + 2) { Console.Write("Position error"); return; }
        if (i == last + 2) data[last + 1] = item;
        else
        {
            for (int j = last; j >= i - 1; --j) data[j + 1] = data[j];
            data[i - 1] = item;
        }
        ++last;
    }

    public T Delete(int i)
    {
        T t = default;
        if (IsEmpty()) { Console.Write("List empty"); return t; }
        if (i < 1 || i > last + 1) { Console.Write("Position error"); return t; }
        if (i == last + 1) t = data[last--];
        else
        {
            t = data[i - 1];
            for (int j = i; j <= last; j++) data[j] = data[j + 1];
        }
        --last; return t;
    }

    public T GetElem(int i)
    {
        T t = default;
        if (IsEmpty()) { Console.Write("List empty"); return t; }
        if (i < 1 || i > last + 1) { Console.Write("Position error"); return t; }
        return data[i - 1];
    }

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

介面定義 (IListDS<T>)

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);
}

測試建議

建立 SeqList<int>,執行 Append/Insert/Delete/GetElem/Locate 驗證邊界條件與正確性。

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