欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

链表基本操作记录

程序员文章站 2024-01-30 16:26:46
...

链表基本操作记录

单链表的基本操作

#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(){
		//主函数略。
}