[数据结构]C#顺序表的实现
在数据结构的学习当中,想必C++可能是⼤家接触最多的⼊门语⾔了
但是C#的数据结构却很少看到,今天我写了⼀个C#顺序表的顺序存储结构
顺序表是在计算机内存中以的形式保存的线性表,线性表的顺序存储是指⽤⼀组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采⽤顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中⼀组地址连续的存储单元中。
将表中元素⼀个接⼀个的存⼊⼀组连续的中,这种是。
采⽤的线性表简称为“ 顺序表”。顺序表的存储特点是:只要确定了起始位置,表中任⼀元素的地址都通过下列公式得到:LOC(ai)=LOC(a1)+(i-1)*L 1≤i≤n 其中,L是元素占⽤存储单元的长度。
下⾯是我们的代码!
⾸先是创建⼀个顺序表的接⼝实现⾥⾯的⽅法:插⼊,删除,查等等。
public interface IListDs<T> {
void Clear();//清空
int GetLength();//获得长度
bool IsEmpty();//是否为空
void Add(T item);//添加功能
void Insert(T item, int index);//插⼊功能
T Delete(int index);//删除功能
T GetEle(int index);//获得操作对象提供给索引器
T this[int index] { get; }//索引器
int Locate(T value);//当前位置
}
接着创建⼀个类实现接⼝
class SeqList<T> : IListDs<T>//实现接⼝⽅法
{
/// <summary>
/// 顺序表实现⽅式
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
private T[] data;//获得⼀个数组
private int count = 0;
public SeqList(int size)//size就是最⼤容量(构造函数)
{
data = new T[size];//获得T类型的数组长度
count = 0;
}
public SeqList() : this(10) { }//调⽤这个构造⽅法,传⼊⼀个整型参数值为10.
public T this[int index]
{
get
{
return GetEle(index);//获得当前索引器的长度
}
}
public void Add(T item)
{
if (count.Equals(data.Length))//判断当前的数据长度是多少,如果给定的数值的⼤于构造函数的值则返回错误
{
Console.WriteLine("当前顺序表已充满,不允许再存");
}
else
{//如果调⽤该⽅法,则item的值会赋予data但是必须要有下标存放,所以为data[count],count+=1是为了不让数据被覆盖,⽽是能够⼀直添加数据
data[count] = item;
count += 1;
}
}
public void Clear()
{
count = 0;//清空顺序表的元素
}
public T Delete(int index)
{
T temp = data[index];//
for (int i = index+1; i <count; i++)
{
data[i - 1] = data[i];//把数据向前移动
}
count--;writeline函数
return temp;
}
public T GetEle(int index)
{
//传进的参数为当前类的可迭代对象的下标
if (index >= 0 && index <= count - 1)
{
return data[index];
}
else
{
Console.WriteLine("索引不存在!");
return default(T);
}
}
/// <summary>
/// 取得数据的个数
/// </summary>
/// <returns></returns>
public int GetLength()
{
return count;
}
public void Insert(T item, int index)
{
for (int i = count; i >= index; i--)//从后向前插⼊,不然会地址改变后替换掉后⼀元素值 {
data[i + 1] = data[i];
}
data[index] = item;
count++;
}
public bool IsEmpty()
{
throw new NotImplementedException();
}
public int Locate(T value)//
{
for (int i = 0; i < count; i++)
{
if (data[i].Equals(value))
{
return i;
}
}
return -1;
}
}
最后在控制台程序Program中调⽤
class Program
{
static void Main(string[] args)
{
/
/C#数据结构的操作实例
SeqList<string> seqList = new SeqList<string>();
//插⼊操作
seqList.Add("123");
seqList.Add("456");
seqList.Add("789");
//获得索引对象
Console.WriteLine(seqList.GetEle(0));
Console.WriteLine(seqList[0]);
seqList.Insert("777", 1);
for (int i = 0; i < seqList.GetLength(); i++)
{
Console.WriteLine(seqList[i] + " ");
}
Console.WriteLine();
seqList.Delete(0);
for (int i = 0; i < seqList.GetLength(); i++)
{
Console.WriteLine(seqList[i] + " ");
}
Console.WriteLine();
Console.WriteLine(seqList.Locate("777"));
seqList.Clear();
Console.WriteLine(seqList.GetLength());
Console.Read();
}
}
上述操作实现了顺序表在C#中的操作,⽤到了索引器和构造函数赋值对于新⼿学习C#和数据结构是⾮常有帮助的。希望⼤家⽀持
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论