1、线性表的链式存储结构的特点是用一组任意的存储但愿存储线性表的数据元素。它包括两个域:其中存储数据信息的域称为数据域,存储直接后继存储位置的域称为指针域。
2、循环链表的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。循环链表的操作和线性链表基本一致,差别之处仅在于算法中的循环条件不再是p或p->next是否为空,而是它们是否等于头指针。
3、双向链表的结点有两个指针域,其中一个指向直接后继,另一个指向直接前驱。
4、在带头结点的双链循环线性表L中第i个位置之前插入元素e,用C语言伪代码实现如下:
Status ListInsert_DuL(DuLinkList &L, int i, ElemType e)
{
    //i的合法值为1 <= i <= 表长+1。
    if (!(p = GetElemP_DuL(L, i))) //在L中确定插入位置
        return ERROR; //P=NULL,即插入位置不合法
    if (!(s = (DuLinkList)malloc(sizeof(DuLNode)))) return ERROR;
    s->data = e;
    s->prior = p->prior; p->prior->next = s;
    s->next = p; p->prior = s;
    return OK;
}
算法时间复杂度:O(ListLength(L))
5、删除带头结点的双链循环线性表L的第i个元素,用C语言伪代码实现如下:
Status ListDelete_DuL(DuLinkList &L, int i, ElemType e)
{
    //i的合法值为1 <= i <= 表长。
    if (!(p = GetElemP_DuL(L, i))) //在L中确定第i个元素的位置指针p
        return ERROR; //P=NULL,即第i个元素不存在
    e = p->data;
    p->prior->next = p->next;
    p->next->prior = p->prior;
    free(p);
    return OK;
}
算法时间复杂度:O(ListLength(L))
除非注明,文章均为CppLive 编程在线原创,转载请注明出处,谢谢。



