typedef struct LNode { // 结点类型
typedef struct { // 链表类型
Status MakeNode( Link &p, ElemType e);
Status InitList( LinkList &L);
ElemType data;
struct LNode *next;}* Link, * Position;
typedef struct { // 链表类型
Link head, tail; // 分别指向线性链表中的头结点和最后一个结点
int len; // 指示线性链表中数据元素的个数} LinkList;
Status MakeNode( Link &p, ElemType e);
// 分配由p指向的值为e的结点,并返回OK;若分配失败,则返回ERRORvoid FreeNode( Link &p);
// 释放p所指结点
Status InitList( LinkList &L);
// 构造一个空的线性链表LStatus DestroyList( LinkList &L);
// 销毁线性链表L,L不再存在Status ClearList( LinkList &L);
// 将线性链表L重置为空表,并释放原链表的结点空间Status InsFirst( Link h, Link s);
// 已知h指向线性链表的头结点,将s所指结点插入在第一个结点之前Status DelFirst( Link h, Link &q);
// 已知h指向线性链表的头结点,删除链表中的第一个结点并以q返回Status Append(LinkList &L, Link s);
// 将指针s所指(彼此以指针相链)的一串结点链接在线性链表L的最后一个结点之后,
// 并改变链表L的尾指针指向新的尾结点Status Remove(LinkList &L, Link &q);
// 删除线性链表L中的尾结点并以q返回,改变链表L的尾指针指向新的尾结点Status InsBefore(LinkList &L, Link &p, Link s);
// 已知p指向线性链表L中的一个结点,将s所指结点插入在p所指结点之前
// 并修改指针p指向新插入的结点Status InsAfter(LinkList &L, Link &p, Link s);
// 已知p指向线性链表L中的一个结点,将s所指结点插入在p所指结点之后
// 并修改指针p指向新插入的结点Status SetCurElem(Link &p, ElemType e);
// 已知p指向线性链表中的一个结点,用e更新p所指结点中数据元素的值ElemType GetCurElem(Link p);
// 已知p指向线性链表中的一个结点,返回p所指结点中数据元素的值Status ListEmpty(LinkList L);
// 若线性链表L为空表,则返回TRUE,否则返回FALSEint ListLength(LinkList L);
// 返回线性链表L中的元素个数Position GetHead(LinkList L);
// 返回线性链表L中头结点的位置Position GetLast(LinkList L);
// 返回线性链表L中最后一个结点的位置Position PriorPos(LinkList L, Link p);
// 已知p指向线性链表L中的一个节点,返回p所指结点的直接前驱的位置,
// 若无前驱,则返回NULLPosition NextPos(LinkList L, Link p);
// 已知p指向线性链表L中的一个节点,返回p所指结点的直接后继的位置,
// 若无后继,则返回NULLStatus LocatePos(LinkList L, int i, Link &p);
// 返回p指示线性链表L中第i个结点的位置并返回OK,i值不合法时返回ERRORPosition LocateElem(LinkList L, ElemType e, Status(*compare)(ElemType, ElemType));
// 返回线性链表L中第1个与e满足函数compare()判定关系的元素的位置
// 若不存在这样的元素,则返回NULLStatus ListTraverse( LinkList L, Status(*visit)());
// 依次对L的每个元素调用函数visit().一旦visit()失败,则操作失败