线性表

[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&&j<i){
        p = p->next;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&&j<i-1)
    {
        p = p->next;
        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&&j<i-1)
    {
        p=p->next;
        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&&j<i){
        p= p->next;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;
}

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容