链表基本操作记录

链表基本操作记录

单链表的基本操作

#include<stdio.h>
#include<stdlib.h>

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

int InitList(LinkList &L){           //创建空链表
    L =new LNode;
    L->next=NULL;
    return 1;
}

int DestroyList(LinkList &L){       //销毁链表
    LNode *temp;
    while(L){
        temp=L->next;
        free(temp);
        L=temp;
    }
    return 1;
}

int ListEmpty(LinkList L){           //链表判空
    if(L)
        return 1;
    else
        return 0;
}

int ListInsert(LinkList &L,int i,int e){         //插入操作
    LinkList P = L;
    LinkList temp;
    int j=0;
    while(P&&j<i-1) {
        P=P->next;
        ++j;
    }
    if(!P||j>i-1)
        return 0;
    temp=(LNode*)malloc(sizeof(LNode));
    temp->data=e;
    temp->next=P->next;
    P->next=temp;
    return 1;
}

int ListDelete(LinkList &L,int i,int &e){         //删除操作
    int j=0;
    LinkList p=L,q;
    while(p->next&&j<i-1){
        p=p->next;
        ++j;
    }
    if(!(p->next)||j>i-1)
        return 0;
    q=p->next;
    p->next=q->next;
    e=q->data;
    free(q);
    return e;
}

int ListLength(LinkList L){         //求链表长
    int len=0;
    while(L) {
        ++len;
        L=L->next;
    }
    return len;
}

int GetElem(LinkList L,int i,int &e){              
    int j=1,len;
    len=ListLength(L);
    if(i<1||!L||i>len)
        return 0;
    else{
    while(L){
        if(j==i){
            e=L->data;
            return e;
        }
        else{
            j++;
            L=L->next;
        }
    }
    return e;
    }
}

int LocateElem(LinkList L,int e){
    int j=1;
    while(L) {
        if(L->data==e)
            return j;
        j++;
        L=L->next;
    }
    return 0;
}

int PrintfList(LinkList L){
    if(!L){
        printf("List L is empty\n");
        return 0;
    }
    while(L){
        printf("%d ",L->data);
        L=L->next;
    }
    printf("\n");
    return 1;
}

int main(){
		//主函数略。
}

猜你喜欢

转载自blog.csdn.net/m0_46200758/article/details/108148045
今日推荐