C#顺序查找表LinearSearchList类的实现

C#、算法与数据结构、面向对象程序设计

适合初学者哦

以下为类

public class LinearSearchList<T> where T : IComparable
    {
    private T[] items; // 存储数据元素的数组
        private int count; // 顺序表的长度
        int capacity = 0; // 顺序表的容量
        public LinearSearchList(int capacity)
        {
            items = new T[capacity];  // 分配capacity个存储单元
            count = 0;  // 此时顺序表长度为0
            this.capacity = capacity;
        }
        public LinearSearchList() : this(16) { }
        public void Add(T k)
        {               // 将k 添加到顺序表的结尾处
            if (Full)
            { // resize array
                Capacity = capacity * 2; // double capacity
            }
            items[count] = k; count++;
        }
        public void Insert(T item, int index)//向表中指定位置插入一个数据
        {
            for (int i = count - 1; i >= index; i--)
            {
                items[i + 1] = items[i];
            }
            items[index] = item;
            count++;
        }
        public bool Full { get { return count >= capacity; } } // 判断顺序表是否已满
        public int Count { get { return count; } } // 返回顺序表长度
        public int Capacity
        {
            get { return capacity; }
            set
            {
                if (value > capacity)
                {
                    capacity = value;
                    T[] copy = new T[capacity]; // create newly sized array
                    Array.Copy(items, copy, count); // copy over the array
                    items = copy; // assign items to the new, larger array
                }
            }
        }
        public void Show(bool showTypeName = false)
        {
            if (showTypeName)
                Console.Write("LinearSearchList: ");
            for (int i = 0; i < this.count; i++)
            {
                Console.Write(items[i] + " ");
            }
            Console.WriteLine();
        }
         // 查找k值在线性表中的位置,查找成功时返回k值首次出现位置,否则返回-1
        public int IndexOf(T k)
        {
            int i = 0;
            while (i < count && !items[i].Equals(k))
                i++;
            if (i >= 0 && i < count)
                return i;
            else return -1;
        }
        // 查找线性表是否包含k值,查找成功时返回true,否则返回false
        public bool Contains(T k)
        {
            int j = IndexOf(k);
            if (j != -1)
                return true;
            else
                return false;
        }
        // 查找k值在线性表中的位置,查找成功时返回k值首次出现位置,否则返回应插入位置的反码
        // 查找范围:从下标si开始,包含length个元素
        public int BinarySearch(T k, int si, int length)
        {
            int mid = 0, left = si;
            int right = left + length - 1;
            while (left <= right)
            {
                mid = (left + right) / 2;
                if (k.CompareTo(items[mid]) == 0)
                    return mid;
                else if (k.CompareTo(items[mid]) < 0)
                    right = mid - 1;
                else
                    left = mid + 1;
            }
            if (k.CompareTo(items[mid]) > 0)
                mid++;
            return ~mid;
        }
    }

以下为测试

class LinearSearchListTest
    {
     LinearSearchList<int> s = new LinearSearchList<int>();
            int n = 10;
            Randomize(s, n);
            Console.Write("随机排列: ");
            s.Show();
            Console.WriteLine("顺序查找:2的位置");
            Console.WriteLine(s.IndexOf(2));
            Console.WriteLine("二分查找:");
            int k = 5;
            int re = s.BinarySearch(k, 0, n);
            Console.WriteLine("k={0}, re={1}, i={2}", k, re, ~re);
        }
        // 用0到10之间的随机整数填充线性表
        static void Randomize(LinearSearchList<int> sl, int n)
        {
            int k; Random random = new Random();
            for (int i = 0; i < n; i++)
            {
                k = random.Next(10);
                sl.Add(k);
            }
        }
    }

十分熟悉是不是
不要忘了点赞哦,关注我还有更多学习资源等着你,一起努力吧,加油!!!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值