单链表练习

news2024/11/29 12:35:33

单链表练习

相关内容:
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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android应用程序的核心组件Activity

Activity组件 Activity组件是Android应用程序的核心组件之一&#xff0c;它提供了一个用户界面&#xff0c;用于与用户进行交互。每个Activity都是一个独立的屏幕&#xff0c;它可以包含用户界面元素&#xff08;如按钮、文本框等&#xff09;和逻辑代码&#xff0c;用于响应用…

玩了一下 Jenkins,最新版本 + JDK11

背景 今年五月的时候玩了一下 Jenkins&#xff0c;最新版本 2.414.3 &#xff0c;JDK 11 。本机有两个 JDK&#xff0c;只放到 Tomcat 里面了&#xff0c;看到了一个启动页面&#xff0c;后面有其他事情就忘记了。最近又想起来&#xff0c;觉得还是应该玩一下这么有技术含量的…

K8S的pod创建过程

创建流程图 用户发起请求创建deployment&#xff1b;apiserver收到创建资源的请求&#xff0c;apiserver对客户端操作进行身份认证&#xff0c;认证完成后接受该请求&#xff0c;并把相关的信息保存到etcd中&#xff0c;然后返回确认信息给客户端&#xff1b;apiserver向etcd…

【Python3】【力扣题】217. 存在重复元素

【力扣题】题目描述&#xff1a; 【Python3】代码&#xff1a; 1、解题思路&#xff1a;遍历每个元素&#xff0c;判断元素个数是否大于1。&#xff08;此方法不适用。超出时间限制&#xff09; class Solution:def containsDuplicate(self, nums: List[int]) -> bool:# 超…

优先队列----数据结构

概念 不知道你玩过英雄联盟吗&#xff1f;英雄联盟里面的防御塔会攻击离自己最近的小兵&#xff0c;但是如果有炮车兵在塔内&#xff0c;防御塔会优先攻击炮车&#xff08;因为炮车的威胁性更大&#xff09;&#xff0c;只有没有兵线在塔内时&#xff0c;防御塔才会攻击英雄。…

关于嵌入式rtthread系统与单片机芯片

简介 我估计已经有很久没更新了&#xff0c;近一年都在某个国企里工作&#xff0c;我做的就是嵌入式工程师的岗位&#xff0c;最近才刚刚退出来&#xff0c;想来说说自己的工作使用的软件和系统。 本身进公司的时候&#xff0c;其实做的就是写单片机的板子的程序的工作&#x…

8. 一文快速学懂常用工具——Linux命令(上)

本章讲解知识点 引言 指令学习 本专栏适合于软件开发刚入职的学生或人士&#xff0c;有一定的编程基础&#xff0c;帮助大家快速掌握工作中必会的工具和指令。本专栏针对面试题答案进行了优化&#xff0c;尽量做到好记、言简意赅。如专栏内容有错漏&#xff0c;欢迎在评论区指…

西门子PLC ModbusTcp通信访问网关后从站(梯形图篇)

这篇文章和之前的" 西门子PLC ModbusTcp通信访问网关后从站(SCL语音轮询状态机FB) "属于姊妹篇,这里我们主要介绍梯形图代码如何实现ModbusTcp轮询。 SCL代码篇 西门子PLC ModbusTcp通信访问网关后从站(SCL语言轮询状态机FB)-CSDN博客文章浏览阅读6次。西门子PLC的…

创建超过1G内存大小的程序

正常情况一个进程最大占用内存为1G一下&#xff0c;如果程序有需求要使用超过1G大小的程序&#xff0c;可进行如下操作 VS修改设置&#xff1a;属性--->链接器--->系统--->启用大地址 【选择是】 测试申请堆内存代码 #include <stdlib.h> #include <stdio…

【数据结构】树形结构所有路径复原为链表

目录 1. 树形结构可视化 2. 树形结构转为链表 此目标是要还原树形结构的所有路径。树形结构是一种常见的数据结构&#xff0c;它表示元素之间层次关系。在树形结构中&#xff0c;每个节点可能拥有一个或多个子节点&#xff0c;形成了一个分层的结构。为了还原树形结构的路径&…

Linux的账号管理

本章的学习感觉如果不做系统管理员&#xff0c;作为简单了解就可以了 前面介绍了&#xff0c;用户&#xff0c;组&#xff0c;other三个角色&#xff0c; 每个用户创建都会有uid与之对应&#xff0c;创建的用户基本信息在一下两个文件中&#xff0c;也是我们要介绍的内容&…

天猫双11:秋冬换季呼吸健康受关注 呼吸机、雾化器、血氧仪成交翻番

10月31日晚8点&#xff0c;天猫双11正式开售&#xff0c;健康消费热情集中释放。秋冬换季&#xff0c;呼吸健康备受关注&#xff0c;呼吸机、雾化器、血氧仪成交翻番&#xff0c;中药滋补经典方增长近400%。天猫健康数据显示&#xff0c;小仙炖、Ulike、Swisse、可复美、敷尔佳…

网课搜题小程序源码/小猿题库多接口微信小程序源码+自带流量主

网课搜题小程序源码&#xff0c;多接口小猿题库等综合网课搜题微信小程序源码带流量主&#xff0c;网课搜题小程序&#xff0c;可以开通流量主赚钱。 搭建教程 1、微信公众平台注册自己的小程序 2、下载微信开发者工具和小程序的源码 3、上传代码到自己的小程序 下载地址&…

车载网关让无人车栩栩如生:一款性价比车载终端案例

​无人车是汽车智能化的高形态,而连接无人车的大脑正是5G车载网关。今天让我们通过SV900-5G产品,感受一下无人车会带来怎样便利的生活场景。 详情查看&#xff1a;https://www.key-iot.com/iotlist/sv900.html 我们首先来到一座自动化工厂,几台小型AGV忙碌穿梭,它们都安装了SV…

跨国文件传输为什么要用专业的大文件传输软件?

跨国文件传输是许多跨国企业需要的基础工作&#xff0c;对于传输的质量和速度要求也是很严格的&#xff0c;随着数据量的不断增加&#xff0c;寻常传统的传输方式肯定是不行&#xff0c;需要新的技术和方式来进行传输&#xff0c;大文件传输软件应运而出&#xff0c;那它有什么…

如何创建一个react项目

文章目录 前言前言打开小黑窗口npm init vite后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;react.js &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出现错误&am…

【hive 面试题】聚合操作时null和‘‘对结果的影响

1、HiveSQL中 聚合操作时null和对结果的影响 代码示例&#xff1a; with temp as (select null as aunion allselect 111 as a union allselect 222 as a union allselect 333 as aunion allselect as a )select sum(a), -- null 不会参与运算, 会转换成0avg(a), -- null …

图像二值化阈值调整——OTSU算法(大津法/最大类间方差法)

大津算法&#xff08;OTSU算法&#xff09;是一种常用的图像二值化方法&#xff0c;用于将灰度图像转化为二值图像。该算法由日本学者大津展之于1979年提出&#xff0c;因此得名。 大津算法的核心思想是通过寻找一个阈值&#xff0c;将图像的像素分为两个类别&#xff1a;前景…

【Amazon】AWS实战 | 快速发布安全传输的静态页面

文章目录 一、实验架构图二、实验涉及的AWS服务三、实验操作步骤1. 创建S3存储桶&#xff0c;存放网站网页2. 使用ACM建立域名证书3. 设置Cloudfront&#xff0c;连接S3存储桶✴️4. 设置Route53&#xff0c;解析域名服务5. 通过CLI工具上传网页更新内容【可选】 四、实验总结 …

Python小试牛刀:GUI(图形界面)实现计算器UI界面(二)

上一篇&#xff1a;Python小试牛刀&#xff1a;GUI&#xff08;图形界面&#xff09;实现计算器UI界面&#xff08;一&#xff09;-CSDN博客 在上一篇文章中介绍了Python GUI常用的库&#xff0c;以及运用GUI标准库tkinter仅设计了计算器的UI界面。 而在本篇文章&#xff0c;…