定义接口
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _001_线性表
{
interface IListDS<T>//定义接口
{
int GetLength();
void Clear();
bool IsEmpty();
void Add(T item);
void Insert(T tiem, int index);
T Delete(int index);
T this[int index] { get; }
T GetEle(int index);
int Locate(T value);
}
}
使用顺序表
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _001_线性表
{
/// <summary>
///
/// </summary>
class Program
{
static void Main(string[] args)
{
/// <summary>
/// 使用BCL中的线性表
/// 三个字符串具有索引的先后关系,可以通过索引访问元素
/// </summary>
//List<string> strList = new List<string>();
//strList.Add("123");//0
//strList.Add("456");//1
//strList.Add("789");//2
//Console.WriteLine(strList[1]);
//strList.Remove("789");//移除
//Console.WriteLine(strList.Count);//大小
//strList.Clear();//清除
//Console.WriteLine(strList.Count);
//Console.ReadKey();
//使用我们自己的顺序表
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.Write(seqList[i] + " ");
}
Console.WriteLine();
seqList.Delete(0);
seqList.Clear();
Console.WriteLine(seqList.GetLength());
Console.ReadKey();
}
}
}
顺序表实现方式
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _001_线性表
{
//顺序表实现方式
class SeqList<T> : IListDS<T>
{
private T[] data;//用来存储数据
private int count = 0;//数据个数
/// <summary>
/// 构造方法
/// </summary>
/// <param name="size"></param>
public SeqList(int size)//size是最大容量
{
data = new T[size];
count = 0;
}
public SeqList ():this(10)//默认构造函数容量为10
{
}
//public T this[int index] => throw new NotImplementedException();
public void Add(T item)
{
if(count == data.Length )
{
Console.WriteLine("当前顺序表已经存满");
}
else
{
data[count] = item;
count++;
}
}
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 this[int index]
{
get { return GetEle(index); }
}
public T GetEle(int index)
{
if(index >=0 && index <=count-1)//索引存在
{
return data[index];
}
else
{
Console.WriteLine("索引不存在");
return default(T);
}
}
public int GetLength()
{
return count;
}
public void Insert(T item, int index)
{
for(int i=count-1;i>=index;i--)//从后往前遍历,防止数据被覆盖
{
data[i + 1] = data[i];
}
data[index] = item;
count++;
}
public bool IsEmpty()
{
return count == 0;
}
public int Locate(T value)
{
for(int i=0;i<count;i++)
{
if(data[i].Equals (value ))
{
return i;
}
}
return -1;
}
}
}