【数据结构】链表

目录

一、单链表

1.类型定义

2.基本操作

2.1单链表的初始化

2.2单链表查找元素

2.3单链表求后继

2.4单链表构造结点

2.5单链表的插入

2.6单链表的删除

2.7建立单链表


一、单链表

1.类型定义

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

2.基本操作

2.1单链表的初始化
//单链表的初始化
Status InitList_L(LinkList &L){
    if(NULL==(L=(LNode*)malloc(sizeof(LNode))))
        return OVERFLOW;
    L->next=NULL;
    return OK;
}
2.2单链表查找元素
//单链表查找元素
LNode * Search_L(LinkList L,ElemType e){
    LNode *p;
    if(L==NULL) return NULL;
    p = L->next;
    while(p!=NULL && p->data!=e) p=p->next;
    return p;
}
2.3单链表求后继
LNode *NextElem_L(LNode *p){
    if(p==NULL) return NULL;
    return p->next;
}
2.4单链表构造结点
LNode * MakeNode_L(ElemType e){
    LNode * p;
    p=(LNode*)malloc(sizeof(LNode));
    if(p!=NULL){
        p->data = e;
        p->next=NULL;
    }
    return p;
}
    
2.5单链表的插入
Status InsertAfter_L(LNode*p,LNode*q){//q插到p后面
    if(p==NULL||q==NULL) return ERROR;
    q->next = p->next;
    p->next = q;
    return OK;
}
2.6单链表的删除
Status DeleteAfter_L(LNode*p, ElemType &e){//删除p结点的后继结点
    LNode * q;
    if(p==NULL||p->next==NULL) return ERROR;
    q=p->next;
    e=q->data;
    p->next=q->next;
    free(q);
    return OK:
}
2.7建立单链表
Status CreatList_L(LinkList &L,int n,ElemType *A){
    LNode *p,*q;
    int i;
    InitList_L(L);
    if (L==OVERFLOW) return OVERFLOW;
    p = L;
    for(i=0;i<n;i++){
        q=MakeNode_L(A[i]);
        InsertList_L(p,q);
        p=q;
    }
    return OK;
}
 
2.8单链表的逆置
void InverseList(LinkList L){
    LNode *p,*q;
    if(L->next == NULL || L->next->next == NULL) return ;//链表为空或只有一个结点
    p = L->next;
    L->next = NULL; //头节点与首结点断开
    while(p!=NULL){
        q=p->next;
        InsertAfter_L(L,p);
        p = q;
    }
}
2.9有序单链表的合并
void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc){
    LinkList pa,pb,pc,temp;
    pa = pa->next;
    pb = pb->next;
    Lc = pc = La;
    while(pa && pb)
        if(pa->data<=pb.data){
            temp = pa->next;
            InsertAfter_L(pc,pa);
            pc = pa;
            pa = temp;
        }else{
            temp = pb->next;
            InsertAfter_L(pc,pb);
            pc = pb;
            pb = temp;
        }
    pc->next=pa?pa:pb;
    free(Lb);
}

……

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值