单链表

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

//定义单链表
typedef struct LNode{        //定义一个单链表
    int data;                //数据域
    struct LNode *next;        //指向下一个元素的指针
}LNode,*LinkList;

//初始化单链表
bool InitList(LinkList &L){
    L=(LNode *)malloc(sizeof(LNode));    //分配头节点
    if(L==NULL){                        //内存不足
        return false;
    }
    L->next=NULL;
    return true;
}

//利用头插法建立一个单链表
LinkList List_HeadInsert(LinkList &L){
    LNode *s;                            //指向新结点的指针
    int x;                                //新结点的数据域

    L=(LinkList)malloc(sizeof(LNode));    //创建头结点
    L->next=NULL;                        //初始为空链表
    scanf("%d",&x);
    while(x!=9999){                        //输入9999结束创建
        s=(LNode *)malloc(sizeof(LNode));    //创建新结点
        s->data=x;
        s->next=L->next;
        L->next=s;
        
        scanf("%d",&x);
    }
    return L;
}

//利用尾插法建立一个单链表
LinkList List_TailInsert(LinkList &L){
    int x;                                //新结点的数据域
    L=(LinkList)malloc(sizeof(LNode));    //创建头结点
    LNode *s;*r=L;                        //r为尾表指针
    scanf("%d",&x);
    while(x!=9999){                        //输入9999结束创建
    /*在r结点之后插入元素*/
        s=(LNode *)malloc(sizeof(LNode));    //创建新结点
        s->data=x;
        r->next=s;
        
        r=s;                            //r指向新的表尾结点
        
        scanf("%d",&x);
    }
    return L;
}

//按序号查找结点值
LNode *GetElem(LinkList L,int i){
    int j=1;
    LNode *p=L->next;            //把第一个结点的指针赋予p指针
    if(i==0){
        return L;
    }
    if(i<1){
        return NULL;
    }
    while(p&&j<i){
        p=p->next;
        j++;
    }
    return p;
}

//按值查找表结点
LNode *LocateElem(LinkList L,int e){
    LNode *p=L->next;
    while(p!=NULL&&p->data!=e){
        p=p->next;
    }
    return p;
}

int main(){
    LinkList L;
    InitList(L);
    List_HeadInsert(L);
    return 0;
}

 

posted @ 2022-07-13 19:36  CherriesOvO  阅读(13)  评论(0编辑  收藏  举报