数据结构_1.顺序链表
所有的链表都应该有一下功能:
(1)获取链表长度
(2)清楚链表全部项
(3)判断链表是否为空
(4)判断链表是否已满
(5)在链表末尾添加新项
(6)在链表指定位置插入新项
(7)在链表指定位置删除项目
(8)根据输入项的序号返回链表项
(9)根据输入列表项的值返回该项的序号
在这里定义一个借口,约束所有的链表类都必须实现该借口,列表代码如下:
inte易做图ce IListFunction<T>
{
int GetLength();
void Clear();
bool IsEmpty();
bool IsFull();
void Append(T item);
void Insert(T item, int index);
void Delete(int index);
T GetItem(int index);
int Locate(T value);
}
顺序链表实现代码如下:
public class SequenceList<T> : IListFunction<T>
{
private int max;
private int last;
private T[] data;
public SequenceList(int max)
{
data = new T[max];
this.max = max;
last = -1;
}
/// <summary>
/// 实现索引器
/// </summary>
/// <param name="i"></param>
/// <returns></returns>
public T this[int i]
{
get { return data[i]; }
set { data[i] = value; }
}
/// <summary>
/// 获取顺序表长度
/// </summary>
/// <returns></returns>
public int GetLength()
{
return last + 1;
}
/// <summary>
/// 这里很奇怪,单纯只把list设置为-1可以吗?
/// 把list设置为-1,在线性表里面存储的数据并没有清理掉,起始就是线性表里面的数据无法访问
/// 但是线性表里面的数据还是存在的
/// </summary>
public void Clear()
{
last = -1;
}
/// <summary>
/// 判断顺序表是否为空
/// </summary>
/// <returns></returns>
public bool IsEmpty()
{
if (last == -1)
return true;
else
return false;
}
/// <summary>
/// 判断顺序表是否已满
/// </summary>
/// <returns></returns>
public bool IsFull()
{
if (last == max - 1)
return true;
else
return false;
}
/// <summary>
/// 在顺序表末尾插入数据
/// </summary>
/// <param name="item"></param>
public void Append(T item)
{
if (IsFull())
throw new Exception("超出索引最大值");
data[++last] = item;
}
/// <summary>
/// 向顺序表指定位置插入新值
/// </summary>
/// <param name="item"></param>
/// <param name="index"></param>
public void Insert(T item, int index)
{
if (IsFull())
throw new Exception("链表已满,无法插入插入数据");
if (index < 0 || index > last + 2)
throw new Exception("插入位置小于零或超出链表最大位置");
if (index == last + 1)
{
data[index] = it
补充:软件开发 , C# ,