近来在自学数据结构与算法,计划每天学一个结构,现在将每天的所得写下,希望能坚持下去,有所收获。
第一天当然是从顺序表开始了。顺序表是线性中的一种,这种方式使用连续的存储单元存储线性表的数据元素。
下面是我使用C#实现的顺序表
class SqList<T>
{
const int MAXSIZE = 20;
public enum Status { ERROR, OK };
T[] data;
int length;
public SqList() //创建一个空的线性表
{
data = new T[MAXSIZE];
length = 0;
}
public Status GetElem(int i, ref T e) //获得线性表位置第i个元素
{
if (this.length == 0 || i < 1 || i > this.length)
return Status.ERROR;
e = data[i - 1];
return Status.OK;
}
public int Length() //返回线性表的长度
{
return length;
}
public Status Insert(int i, T e) //向线性表第i个位置插入元素e
{
if (length == MAXSIZE) //顺序线性表已满
return Status.ERROR;
if (i < 1 || i > length + 1) //i超出范围
return Status.ERROR;
if (i <= length) //i不在表尾
{
for (int k = length - 1; k >= i - 1; k--)
data[k + 1] = data[k];
}
data[i - 1] = e;
length++;
return Status.OK;
}
public Status Delete(int i) //删除线性表中第i个元素
{
if (length == 0) //若线性表为空
return Status.ERROR;
if (i < 1 || i > length) // 若i超范围
return Status.ERROR;
//e = data[i - 1];
if (i < length) //若i不在表尾
{
for (int k = i; k < length; k++)
data[k - 1] = data[k];
}
length--;
return Status.OK;
}
public Status Add(T e) //向表尾插入元素e
{
if (length >= MAXSIZE - 1) //若线性表已满
return Status.ERROR;
data[length] = e;
length++;
return Status.OK;
}
public void Show() //显示线性表中的元素
{
Console.WriteLine("This List has {0} elements.", length);
for (int i = 0; i < length; i++)
Console.WriteLine(data[i]);
}
}
这个实现还是比较简单的,再接再厉,加油!