单链表练习

单链表练习

相关内容:
1.再理解:LNode、*LinkList
2.单链表的整表创建(头插法和尾插法)
3.单链表的读取、插入、删除
4.单链表的整表删除

//单链表的初始化、创建、插入、删除、查找
//结点的结构体:数据域、指针域
//使用头指针的指针以便可以不用返回头指针
//初始化:创建头结点、其指针域置空  
//创建(头插法)形参:链表头指针的指针(头插会修改头指针指向)、结点个数,返回头指针
//插入-形参:链表头指针、插入位序、插入元素
//删除-形参:链表头指针、删除位序、无返回
//查找-形参:链表头指针、待查元素、返回位序
//打印-形参:链表头指针
#include<stdio.h>
#include<malloc.h>
typedef struct Node
{
    int data;
    struct Node *next;
}LNode,*LinkList;
//初始化:创建头结点、其指针域置空
void InitLinkList(LinkList *L){
    //*L用于保存头指针,方便头插时更改头结点中的next指向
    *L=(LNode*)malloc(sizeof(LNode));
    (*L)->next=NULL;
}
//创建(头插法)形参:链表头指针的指针(头插会修改头指针指向)、结点个数,返回头指针
void CreateLinkList(LinkList *L,int n){
    LNode *p;//定义新建结点
    for (size_t i = 0; i < n; i++)
    {
        //开辟空间
        p=(LNode*)malloc(sizeof(LNode));
        //输入数据
        printf("输入第%d个结点的数据:",i+1);
        scanf("%d",&p->data);
        //插入前:L A
        //插入后:L p A
        p->next=(*L)->next;
        (*L)->next=p;
    }
}
//插入-形参:链表头指针、插入位序、插入元素
void LinkListInsert(LinkList *L, int i, int e){
    int j=0;//计数器
    //遍历时使用的指针p,插入结点s
    LNode *p,*s;
    //为插入结点开辟空间
    s=(LNode*)malloc(sizeof(LNode));
    s->data=e;
    p=(*L);//p指向头结点
    while (p!=NULL&&j<i-1)//位序i,下标i-1
    {
        p=p->next;//后移指针p,直到到达插入位置的前一个位置
        j++;
    }
    //插入操作
    //插入前 p 插入位置 p的下一个结点
    //插入后 p s p的下一个结点
    s->next=p->next;
    p->next=s;
}
//删除-形参:链表头指针、删除位序
void DeleteElem(LinkList *L, int i){
    int j=0;//计数器
    //遍历时使用的指针p,待删结点q
    LNode *p,*q;
    p=(*L);//p指向头结点
    while (p!=NULL&&j<i-1)//位序i,下标i-1
    {
        p=p->next;//后移指针p,直到到达删除位置的前一个位置
        j++;
    }
    //删除操作
    //删除前 p 待删除结点 下一个结点
    //删除后 p 待删除结点
    q=p->next;
    p->next=q->next;
    free(q);
}
//查找-形参:链表头指针、待查元素、返回位序
int GetElemPosition(LinkList *L,int e){
    int i=0;//下标
    //遍历时使用的指针p
    LNode *p;
    p=(*L);//p指向头结点
    while (p!=NULL)
    {
        if (p->data!=e)
        {
            p=p->next;
            i++;
        }
    }
    if (p==NULL)//未找到
        return 0;
    return i+1;//下标+1=位序
}
//打印
void PrintLinkList(LinkList *L){
    //遍历时使用的指针p
    LNode *p;
    p=(*L)->next;//p指向首元结点
    while (p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
}
int main(){
    int n,i,e;
    LinkList L;
    InitLinkList(&L);
    printf("输入结点个数:");
    scanf("%d",&n);
    CreateLinkList(&L,n);
    PrintLinkList(&L);
    printf("\n输入插入位序及元素:");
    scanf("%d%d",&i,&e);
    LinkListInsert(&L,i,e);
    printf("插入后的链表:");
    PrintLinkList(&L);
    printf("\n输入待删除元素的位序:");
    scanf("%d",&i);
    DeleteElem(&L,i);
    printf("删除指定元素后的链表:");
    PrintLinkList(&L);
    printf("\n输入待查询的元素:");
    scanf("%d",&e);
    i=GetElemPosition(&L,e);
    if (i==0)
    {
        printf("未查询到该元素!");
    }else{
        printf("待查询元素的位序为:%d",i);
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/112215.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开放式耳机能保护听力吗,开放式耳机跟骨传导耳机哪个更好?

如果从严格意义上来讲的话&#xff0c;开放式耳机中的骨传导耳机是能保护听力&#xff0c;现如今的开放式耳机是一个统称&#xff0c;将所有不入耳的类目全部规划到一块。因此在开放式耳机中存在着一些耳机是只能够保持周边环境音&#xff0c;而不是保护听力的。 下面让我来给…

linux下的程序环境和预处理(gcc演示)

1. 程序的翻译环境和执行环境 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境。 第1种是翻译环境&#xff0c;在这个环境中源代码被转换为可执行的机器指令。 第2种是执行环境&#xff0c;它用于实际执行代码。 2. 详解编译链接 2.1 翻译环境 组成一个程序的…

MySQL连接的原理⭐️4种优化连接的手段性能提升240%

MySQL连接的原理⭐️4种优化连接的手段性能提升240%&#x1f680; 前言 上两篇文章我们说到MySQL优化回表的三种方式&#xff1a;索引条件下推ICP、多范围读取MRR与覆盖索引 MySQL的优化利器⭐️索引条件下推&#xff0c;千万数据下性能提升273%&#x1f680; MySQL的优化…

函数式接口详解(Java)

函数式接口详解&#xff08;Java&#xff09;_函数式接口作为参数_凯凯凯凯.的博客-CSDN博客 函数式接口&#xff1a;有且仅有一个抽象方法的接口 Java中函数式编程体现就是Lambda表达式&#xff0c;所以函数式接口就是可以适用于Lambda使用的接口 只有确保接口中仅有一个抽…

【设计模式】第7节:创建型模式之“建造者模式”

Builder模式&#xff0c;中文翻译为建造者模式或者构建者模式&#xff0c;也有人叫它生成器模式。 在创建对象时&#xff0c;一般可以通过构造函数、set()方法等设置初始化参数&#xff0c;但当参数比较多&#xff0c;或者参数之间有依赖关系&#xff0c;需要进行复杂校验时&a…

Springboot 集成 Seata

Seata 是一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式&#xff0c;为用户打造一站式的分布式解决方案。Seata官网 1.找到适合的Seata版本 参考&#xff1a;SpringCloudAlibaba S…

Linux学习之进程二

目录 进程状态 R (running)运行状态与s休眠状态&#xff1a; disk sleep&#xff08;深度睡眠状态&#xff09; T (stopped)&#xff08;暂停状态&#xff09; t----tracing stop(追踪状态) X死亡状态&#xff08;dead&#xff09; Z(zombie)-僵尸进程 孤儿进程 进程优…

python捕获异常和scapy模块的利用

Python捕获异常 ​ 当程序运行时&#xff0c;因为遇到未知的错误而导致中止运行&#xff0c;便会出现Traceback 消息&#xff0c;打印异常。异常即是一个事件&#xff0c;该事件会在程序执行过程中发生&#xff0c;影响程序的正常执行。一般情况下&#xff0c;在Python 无法正…

2023年Q3户外装备市场行业分析报告(京东数据分析):同比增长7%,品牌化发展是核心

近年来&#xff0c;户外运动在我国不少地方蓬勃兴起&#xff0c;发展至今&#xff0c;户外运动早已不是聚焦专业领域的小众群体活动&#xff0c;现已发展成为当下热门的大众休闲活动&#xff0c;参与人群愈发广泛&#xff0c;而这股热潮也带动着相关产业的发展。 今年Q3&#x…

IT老鸟给开发者升职加薪的小技巧

前言&#xff1a; 升职加薪对大多数人来说都是工作重要动力所在&#xff0c;但总存在“青出于蓝而胜于蓝”&#xff0c;后来人居上的情况。很多人不清楚&#xff0c;自己兢兢业业&#xff0c;任劳任怨&#xff0c;到头来还是得不到领导的重视&#xff0c;身边一起过来的同事都成…

GZ035 5G组网与运维赛题第7套

2023年全国职业院校技能大赛 GZ035 5G组网与运维赛项&#xff08;高职组&#xff09; 赛题第7套 一、竞赛须知 1.竞赛内容分布 竞赛模块1--5G公共网络规划部署与开通&#xff08;35分&#xff09; 子任务1&#xff1a;5G公共网络部署与调试&#xff08;15分&#xff09; 子…

单元测试到底测什么,怎么测?我来告诉你

前言&#xff1a; 以国内互联网的开发节奏&#xff0c;在前端业务项目中全面覆盖单元测试有时显得不太可行&#xff0c;主要是因为以下这些绊脚石&#xff1a; UI 交互复杂&#xff0c;路径难以覆盖全面 工期紧&#xff0c;开发对实践 TDD&#xff0c;BDD 所带来的长远效益没有…

Arduino开发

文章目录 资源Arduino IDE 的使用1. 使能编译以及烧录的LOG&#xff1a;2. 下载配置3. 下载 Arduino指令程序下载步骤通过下载器下载通过串口下载 关于Arduino IDE工程生成的二进制文件对比Tools-->burn bootloader 和 ArduinoISP例程 的区别自带例程 资源 Arduino通过串口…

解决MySQL大版本升级导致.Net(C#)程序连接报错问题

数据库版本从MySQL 5.7.21 升级到 MySQL8.0.21 数据升级完成后&#xff0c;直接修改程序的数据库连接配置信息 <connectionStrings> <add name"myConnectionString" connectionString"server192.168.31.200;uidapp;pwdFgTDkn0q!75;databasemail;&q…

【缓存】Spring全家桶中@CacheEvict无效情况共有以下几种

Spring全家桶中CacheEvict无效情况共有以下几种 一、背景介绍二、原因分析三、解决方案 一、背景介绍 SpringBoot中使用Cacheable注解缓存数据&#xff0c;使用CacheEvict注解删除缓存。但是在项目使用过程中&#xff0c;发现使用CacheEvict注解删除缓存无效。 拓展&#xff…

猪八戒、程序员客栈、码市哪个更好用?

最近有很多程序员伙伴在用接单平台线上兼职&#xff0c;问题也来了&#xff1a;到底哪个更好用嘞? 选取了几个问的比较多的&#xff1a;猪八戒、程序员客栈、码市。进行了一下简单的比较。 优点: 猪八戒 第一&#xff0c;猪八戒的名气是毋庸置疑的。无论是它成立至今的时间…

NB-IOT的粮库挡粮门异动监测装置

一种基于NBIOT的粮库挡粮门异动监测装置,包括若干个NBIOT开门监测装置,物联网后台管理系统,NBIOT低功耗广域网络和用户访问终端;各个NBIOT开门监测装置通过NBIOT低功耗广域网络与物联网后台管理系统连接,物联网后台管理系统与用户访问终端连接.NBIOT开门监测装置能够对粮库挡粮…

索引创建的原则

索引的创建是数据库优化中非常重要的一部分&#xff0c;正确创建索引可以大大提高查询效率。以下是一些创建索引时需要考虑的原则&#xff1a; 根据查询频率创建索引&#xff1a; 频繁用于检索的列&#xff1a; 那些频繁用于查询的列或经常出现在 WHERE、JOIN、ORDER BY 和 GR…

企业如何在自媒体平台推广

自媒体是企业宣传品牌的平台之一&#xff0c;在自媒体平台上企业能够较为自由的决定文案内容发布时间&#xff0c;同时后台也会有专门的数据分析帮助企业了解每一次推广效果&#xff0c;成本可控、数据可查、效果可追踪&#xff0c;还能与用户或者潜在用户互动&#xff0c;进行…

放射影像科PACS系统源码

PACS系统是医院影像科室中应用的一种系统&#xff0c;主要用于获取、传输、存档和处理医学影像。它通过各种接口&#xff0c;如模拟、DICOM和网络&#xff0c;以数字化的方式将各种医学影像&#xff0c;如核磁共振、CT扫描、超声波等保存起来&#xff0c;并在需要时能够快速调取…