数据结构c语言链表实现

阅读: 评论:0

数据结构c语言链表实现

数据结构c语言链表实现

/

//  main.c

//  链表

//

//  Created by 丘** on 2021/7/25.

//

#include <stdio.h>

#include <stdlib.h>

typedef struct LNode

{

    int data;

    struct LNode* next;

    

    

}LNode,* LinkList;

void CreatList_H(LinkList L,int n)//前插法创建

{

    

    L->next=NULL;

    int e;

    for(int i=0;i<n;i++)

    {

        LinkList p=(LinkList)malloc(sizeof(LNode));

        printf("请输入元素:");

        scanf("%d",&e);

        p->data=e;

        p->next=L->next;

        L->next=p;

        

    }

    

}

void GetElem(LinkList L,int i)//i为节点序号

{

    LinkList p;

    p=L->next;

    int j=1;

    while(p!=NULL&&j<i)

    {

        p=p->next;

        j++;

    }

    printf("j is %dn",j);

    if(p==NULL||j>i)

    {

        printf("i值不合法");

        return;

        

    }

    int e=p->data;

    printf("%d就是你要找的",e);

    

    

    

}

void CreatList_R(LinkList L,int n)//后插法,需增设尾指针

{

    L->next=NULL;

    int e;

    LinkList r=L;

    for(int i=0;i<n;i++)

    {

        LinkList p=(LinkList)malloc(sizeof(LNode));

        

        printf("请输入元素:");

        scanf("%d",&e);

        p->data=e;

        p->next=NULL;

        r->next=p;//如果是第一个节点的话,等价于L->next=p;

        r=p;

        

    }

    

    

}

LinkList LocateElem(LinkList L,int e)//若p不为空,则查找成功

{

    LinkList p;

    p=L->next;

    while(p!=NULL&&p->data!=e)

    {

        p=p->next;

        

    }

    

    return p;

    

}

void ListInsert(LinkList L,int i,int e)//在位置i插入

{

    LinkList p=L;//p不能等于L->NEXT,因为要考虑如果要在i=1的位置插入节点

    int j=0;

    while(p!=NULL&&(j<i-1))

    {

        p=p->next;

        j++;

    }

    if(p==NULL||j>i-1)

    {

        printf("i值不合法");

        return;

    }

    LinkList s;

    s=(LinkList)malloc(sizeof(LNode));

    s->data=e;

    s->next=p->next;

    p->next=s;

    

    

}

void ListDelete(LinkList L,int i)

{

    LinkList p=L;

    int j=0;

    while(p!=NULL&&(j<i-1))

    {

        p=p->next;

        j++;

    }

    if(p->next==NULL||j>i-1)//这里就不是p==NULL了,因为就算p!=NULL,也可能没有首元节点

    {

        printf("i值不合法");

        return;

    }

    LinkList q=p->next;

    p->next=q->next;

    free(q);

    

}

int main(int argc, const char * argv[]) {

    

    printf("Hello, World!n");

    LNode L;

    int n;

    printf("how many n?n");

    scanf("%d",&n);

    CreatList_R(&L, n);

    

    int i;

    printf("请输入序号n");

    scanf("%d",&i);

    GetElem(&L,i);

    int e;

    LocateElem(&L, e);

    ListDelete(&L, i);

    ListDelete(&L, i);

    

    return 0;

}

本文发布于:2024-01-28 14:10:20,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17064222267978.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据结构   链表   语言
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23