publicclassSqList<T> { publicconstint Maxsize = 20; public T[] Data = new T[Maxsize]; publicint Length;
///<summary> /// 获取第 i 位的元素 ///</summary> ///<param name="i"></param> ///<param name="e"></param> ///<returns></returns> public Status GetElement(int i, out T e) { if (Length == 0 || i < 0 || i >= Length) { e = default(T); return Status.Error; }
e = Data[i]; return Status.Ok; }
///<summary> /// 在第 i 位插入元素 ///</summary> ///<param name="i"></param> ///<param name="e"></param> ///<returns></returns> public Status ListInsert(int i, T e) { if (Length == Maxsize) { return Status.Error; }
if (i < 0 || i > Length) { return Status.Error; }
if (i != Length) { for (var j = Length - 1; j >= i; j++) { Data[j + 1] = Data[j]; } } Data[i] = e; Length++;
return Status.Ok; }
///<summary> /// 删除第 i 位元素 ///</summary> ///<param name="i"></param> ///<param name="e"></param> ///<returns></returns> public Status ListDelete(int i, out T e) { if (Length == 0) { e = default(T); return Status.Error; }
if (i < 0 || i > Length - 1) { e = default(T); return Status.Error; }
e = Data[i]; for (var j = i; j < Length; j++) { Data[j] = Data[j + 1]; }
因此,为了表示每个数据元素 ai 与其直接后继元素 ai+1 之间的逻辑关系,对于数据元素 ai 来说,除了存储本身信息之外,还需要存储一个指示其直接后继的信息。我们把存储数据元素信息的域称为数据域,把存储直接后继信息的域称为指针域(对于高级语言,我们可以把它理解成对象引用域)。把这两部分组成的数据元素称为节点(Node)。 n 个节点链接成一个链表,即线性表的链式存储结构。因为此链表每个节点只有一个指针域,因此称为单链表。
public Status ListDelete(int i, out Node<T> node) { node = null; var status = GetElement(i - 1, outvar prevNode); if (status != Status.Ok) return status;
var current = prevNode.NextNode; prevNode.NextNode = current.NextNode; node = current;
public Status ListDelete(int i, out Node<T> node) { node = null; var status = GetElement(i - 1, outvar prevNode); if (status != Status.Ok) return status; var current = prevNode.NextNode; current.NextNode.PrevNode = prevNode; prevNode.NextNode = current.NextNode; node = current; return status; } }