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);
}
}
}
不要忘了点赞哦,关注我还有更多学习资源等着你,一起努力吧,加油!!!