在数据结构的学习当中,想必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--; 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#和数据结构是非常有帮助的。希望大家支持