线性表

[TOC]

带头结点的单向链表

typedef struct LNode{
    ElemYype data;
    struct LNode *next;
}LNode,*LinkList;

获取元素

GetElem_l(LinkList L,int i,ELemtype &e)
//带头结点,返回第I个元素,并赋值给e,成功返回1,失败返回-1
{
    p = L-next;j=1;
    while(p&&jnext;j++;
    }
    if(!p||j>i) return -1;
    e = p->data;
    return 1;
}

指定位置插入一个结点

int ListInsert_l(LinkList &L,int i,Elemtype e)
{
    p = L;j=0;
    while(p&&jnext;
        j++;
    }//寻找第i-1个结点
    if(!p||j>i-1) return -1;
    s = (Linklist)malloc(sizeof(LNode));
    s->data = e;s->next = p->next;
    p->next =s;
    return 1;
}

指定删除一个结点

int ListDelete_l(LinkList &l,int i,ElemType &e)
{ //提取删除的第一个元素在e中,成功返回1,失败-1
    p =L;i=0;
    while(p&&jnext;
        j++;
    }
    if(!(p->next)||j>i-1) return -1;
    q = p->next;p->next = q->next;
    e = q->data;free(q);
    return 1;
} //ListDelete_l

循环双向链表

定义

typedef struct DulNode{
    ElemType data;
    struct DulNode *prior;
    struct DulNode *next;
}DuLNode,*DulLinkList;

指定位置插入结点

int ListInsert_dul(DuLinkList &L,int i,ElemType e)
{//成功返回1,失败-1
    int j=0;
    DuLinkList p = L;
    while(p&&jnext;j++;
    }
    if(!p ||j>i)
        return -1;
    if(!(s=(DuLinkList)malloc(sizeof(DuLNode)))) return -1; //申请内存失败
    s->data = e;
    s->prior = p->prior;p->prior->next = s;
    s->next = p; p->prior =s;
    return 1;
}

指定位置删除结点

int ListDelete_DuL(DuLinkList &L,int i,ElemType &e)
{
    if(!(p=GetElemP_DuL(L,i)))
        return -1;
    e = p->data;
    p->prior->next = p->next; 
    p->next->prior = p->prior; // 这两句话应该是可以调换的,因为p一直都存在
    free(p);
    return 1;
}

中间的结点变量很重要应该要首先赋值.

你可能感兴趣的:(线性表)