链表的创建,倒置,查询,插入操作

【复习笔记】单链表 单链表的一般方法(有头结点head): 1、创建一个空链表 head->next = NULL; return head; 2、将链表清零 定义一个指向头结点的链表指针,只要head->next != NULL,就遍历链表,并使定义的链表指针指向head->next,用于保存下一个结点可以使之成为head->next,并将指针指向的内容释放,即释放第一个结点并指向 阅读详情
#include <stdio.h>
#include <stdlib.h>

typedef struct node {
    int data;
    struct node *next;
}linknode,*linkp;

int CreateList(linkp H); //创建链表,并返回链表中数值个数
void InversionList(linkp H); //将已经创建并赋值的链表进行倒置
linkp GetList(linkp H,int i);//按照序号进行查找(链表头结点序号为0)
linkp LocateList(linkp H,int data); //按照数值进行查找,结果返回查到的输入数值在链表中的序号
void InsertList(linkp H, int num, int i); //将数值num插入首节点为H的链表的第i位置(链表头结点序号为0)


int main()
{
    linkp findpNo,findpNum,r,H;
    int i = 0;   
    int no = 0; //输入的待查询的序号
    int findno = 0;//输入的待查询的数值
    int count = 0;//链表中包含数值个数
    int insertnum = 0;//向链表中插入的数值
    int insertno = 0;//将需要插入的数值插到链表的序号
    H = (linkp)malloc(sizeof(linknode));
    H->next = NULL;
    count =CreateList(H); //创建链表并赋值
    if(count==0)
    {   
        printf("该链表只有头结点,不包含任何数据!\n");
        return -1; 
    }   
    r = H;
    printf("\n#####步骤1:链表倒置前序列值#####\n");
    while(r->next)
    {   
        r = r->next;
        printf("链表第%d个数字是%d\n", ++i, r->data);
    }   
    
    printf("\n#####步骤2:链表倒置后序列值#####\n");
    InversionList(H); //将链表进行倒置
    r = H;
    i = 0;
    while(r->next)
    {   
        r = r->next;
        printf("链表第%d个数字是%d\n", ++i, r->data);
    }

    printf("\n#####步骤3:通过序号查找链表的数值#####\n");
    /**按照序号查找链表的某个节点**/
    while(1)
    {
        printf("请输入需要查找的序号(链表头结点序号为0,输入-1不再查询):");
        scanf("%d", &no);
        if(no==-1)
            break;
        if(no>count)
        {
            printf("序号范围[0~%d],请重新输入序号!\n", count);
            continue;
        }
        findpNo = GetList(H, no);
        if(findpNo==H)
        {
            printf("链表头结点无数值!\n");
            continue;
        }
        printf("链表序号[%d]所对应数值是:[%d]\n", no, findpNo->data);

    }

    /**通过数值查找链表的某个节点**/
    printf("\n#####步骤4:通过数值查找其在链表的位置#####\n");
    while(1)
    {
        printf("请输入需要查找的数值(链表头结点序号为0,输入-1不再查询):");
        scanf("%d", &findno);
        if(findno==-1)
            break;
        findpNum = LocateList(H,findno);
        if(findpNum == NULL)
        {
            printf("输入的数值不在所查链表中!\n");
        }
        else
        {
            r = H;
            i = 0;
            while(r->next)
            {
                i++;
                r = r->next;
                if(r==findpNum)
                {
                    printf("链表中数值[%d]所对应序号是[%d]\n", findno, i);
                    break;
                }
            }

        }

    }

    /**向列表中插入数据,并打印插入数据后的链表数据序列**/

    printf("\n#####步骤5:通过输入的数值和序号将数值插入到链表的指定位置#####\n");
    while(1)
    {
        printf("请输入向链表中插入的数值以及序号(usage:insertnum inserno;注:两者同为-1,则停止插入数据):");
        scanf("%d,%d", &insertnum,&insertno);
        if(insertnum==-1 && insertno==-1)
            break;
        if(insertno>count)
        {
            printf("插入范围是1~%d,请重新输入!\n", count);
            continue;
        }


        InsertList(H, insertnum, insertno);
        count++;
        r = H;
        i = 0;
        while(r->next)
        {
            r = r->next;
            printf("链表第%d个数字是%d\n", ++i, r->data);
        }

    }
    return 0;
}

int CreateList(linkp H)
{
    linkp r,p;
    int num = -1;
    int count = 0;
    r = H;

    while( 1 )
    {
        printf("请输入存入链表中的数字\n");
        scanf("%d", &num);
        if ( -1 == num )
        {
            break;
        }
        count++;
        linkp p = (linkp)malloc(sizeof(linknode));
        p->data = num;
        p->next = NULL;
        r->next = p;
        r = p;
    }
    return count;
}

void InversionList(linkp H)
{
    linkp p,q;
    p = H->next; //p指向头结点下一个节点
    H->next = NULL; //将头结点与其下一个节点断开连接,此时p节点成为链表的第一个节点
    while(p)
    {
        q = p; //保存链表余下节点的头一个节点
        p = p->next; //将p节点向后移
        q->next = H->next; //将链表余下节点的第一个节点插入到原链表头结点与其指向节点(NULL)中间
        H->next = q;//将H指向将要插入的节点

    }

}

linkp GetList(linkp H,int i)
{
    int j = 0;
    linkp r;
    r = H;
    if(i<0) //判断序号是否合法
    {
        printf("输入序号有误!");
        return NULL;
    }
    else if(i==0)
        return H;
    else
    {
        while(r->next)
        {
            j++;
            r=r->next;
            if(j==i)
            {
                return r;
            }
        }
    }
}

linkp LocateList(linkp H, int num)
{
    linkp r;
    int i = 0;
    r = H;
    while(r->next)
    {
        i++;
        r = r->next;
        if(r->data==num)
            return r;
    }
    return NULL;

}


void InsertList(linkp H, int num, int i)
{
    linkp p,new;
    new = (linkp)malloc(sizeof(linknode));
    new->data = num;
    p = GetList(H,i-1);
    new->next = p->next;
    p->next = new;
}

 

LoRA学习: SX1276/SX1277/SX1278对比 Lora芯片 SX1276/SX1277/SX1278的比较SX1276/7/8是一种半双工传输的低中频收发器,配备标了标准FSK和远距离扩频Lora调制解调器。该芯片可以用于超长距离的Lora扩频通信,并且抗干扰性强,同时达到低功耗要求。1、芯片关键参数对比: 可以看出SX1276的带宽范围为 7.8~500kHz ,扩频 因子6~12,并覆盖所有可用频段。 SX1277的带宽和频段方位与 S 阅读详情

相关推荐

C语言实现链表,创建、插入、查找、删除、遍历等基本操作

C与语言实现链表的创建、插入(头插法、尾插法)、遍历、查找、删除操作

C语言实现链表的创建,插入,修改,删除,遍历,反转(完整可直接应急)

可直接用的哦!!!!希望能帮到学弟们,学妹们!!!

ljxgyt的博客 3449

基于单片机的电子密码锁源代码

包含4-5个源程序,课程设计所搜,需要的拿走

链表的创建、添加、删除、倒置、遍历与长度获取(基于C)

一、链表的创建 用C创建有两种方式: 第一,直接创建,不传参,并用函数返回值返回链表即可,这样返回的是一个链表,或者说是一个一重指针。 第二,以链表指针为参数,这是一个二重指针,在函数中要操作链表,必须要取二重指针的内容,即一个一重指针来操作。 用C++创建更为简单,类似上述第二种,使用C++的引用&特性,直接操作一重指针。 ...

卡木 622

个人所得税计算 网页版 在线计算个人所得税

个人所得税计算 网页版 在线计算个人所得税 采用js脚本 在线计算个人所有税公式 非常实用,供大家学习

51单片机发光二极管循环点亮

发光二极管循环点亮程序,发光二极管循环点亮程序,发光二极管循环点亮程序

链表的插入操作

小甲鱼链表插入: 对链表的插入是指将一个结点插入到一个已有的链表中。 为了能做到正确插入,必须解决两个问题: ①怎样找到插入的位置; ②怎样实现插入。 我们可以先用指针变量p0指向待插入的结点,p1指向第一个结点,将p0->num与p1->num相比较,如果p0->num > p1->num,此时将p1后移,并使p2指向刚才p1所指的结点。 流程图如下,左边三个都是插入到链表中间(不是表头或表尾),右上角是插入到表头,右下角是插入到表尾。 源码: #include <s

Joaquin233的博客 7236

C++ PPt 最好的老师讲课!!!

最好的老师的教授的课程,C++中国始祖谭浩强亲临光顾本校,监督,大家不要错过机会啊 !!

史上最全单链表的增删改查反转等操作汇总以及5种排序算法(C语言)

1.准备工作 首先包含头文件,定义链表结构体,产生随即链表的范围,定义全局头尾节点。 #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 10 /*定义链表*/ typedef struct Node { int data; struct Node *ne...

嵌入式与Linux那些事的博客 1万+

计算机网络期末复习题

计算机网络期末复习题 201708-201801计算机网络复习指导发布-校考学生!!下载截止于12.5日晚上9点 2017-12-04 23:07 计算机网络复习指导-校内考试 §1.名词解释: 1. 计算机网络 2.网络体系结构 3.高速以太网 4.静态路由选择 5. 动态路由选择 6.子网掩码 8.动态主机配置协议 9.套接字 10.客户/服务器模型(C/S模型) 11.域名系统(DNS) 12.光纤分布式数据接口FDDI §2.简答题: 1.试谈你对网络安全的威胁和防病毒技术的认识。(线下教学课件) 2.简述物理层的四个特性。(线下教学课件) 3.计算机网络的组成(P2-P3) 4.计算机网络的功能(P3) 5.计算机网络标准化的相关组织(P4+线下教学课件) 6.计算机网络的性能指标(P8+线下教学课件) 7.简述你所知道的网络传输介质(P33-34) 8.物理层的四个特性(P34) 9.简述四种帧边界的划分方法(即组帧方法)。(P52-54+线下教学课件) 10.简述停止-等待流量控制(协议)。(P59+P62-P64+线下教学课件) 11.简述时分多路复用(P69+线下教学课件) 12.简述频分多路复用(P68+线下教学课件) 13.简述IPv4地址的分类(P122-123) 14.UDP数据报与IP分组的区别(P187) §3.论述题: 1.试说明数据链路层原语和协议的转换。(线下教学课件) 2.描述常规释放的过程,并画出其示意图。(线下教学课件) 3.奈奎斯特定理公式和香农定理公式的主要区别是什么? 4.试比较电路交换、报文交换和分组交换等三种数据传输方式。(P27-29) 5.谈谈你对差错控制方法的理解。(P54-58+线下教学课件) 6.谈谈域名解析过程(P225-226) 7.ARP和DNS是否有些相似?它们有何区别?(P227) 8.FTP的工作原理。(P228)

CanOpen PDO映射实战:从原理到配置的完整指南

本文详细解析了CanOpen PDO映射的原理与配置流程,从基础通信机制到实战配置步骤,涵盖禁用PDO、清空映射、逐项映射和使能PDO等关键环节。特别针对西门子G120变频器、台达伺服和倍福CX控制器等不同厂商设备,提供了具体的配置技巧和常见问题排查指南,帮助工程师快速掌握多厂商设备间的PDO通信配置。

weixin_30718391的博客 517

基于C++的单链表的实践

基于C++的单链表的实践 头文件的声明: #pragma once #ifndef header_h #define header_h #include<iostream> using namespace std; #define ok 1 #define error 0 #define null 0 #define overflow -2 typedef int status; //将status定义为int型类型 ,用于函数类型的定义 typedef int el

qq_49761461的博客 188

深入解析docx4j:从Word到PDF的高保真转换实战

本文深入解析了如何使用纯Java开源库docx4j实现Word到PDF的高保真转换。针对中文环境,重点讲解了字体映射原理、Linux服务器字体部署方案,并提供了完整的代码示例和配置方法。同时,文章涵盖了表格、图片处理、性能优化及生产环境部署指南,帮助Java开发者构建稳定、可控的文档转换服务。

weixin_29237635的博客 673

数据结构-单链表

链表---一种内存中不连续空间的数据结构(数组-连续内存空间) 操作:插入 删除 修改 查询 例子: // // MyList.h // List // editor:DRAGON // Created by 5016 on 13-11-25. // Copyright (c) 2013年 dradon. All rights reserved. // #ifndef List_

dragonzard的专栏 590

VS2015与QT界面开发中解决‘ui_xxx.h‘文件类名不一致导致的编译错误

本文详细解析了在VS2015与QT界面开发中,因.ui文件顶层部件objectName与生成类名不一致导致'ui_xxx.h'文件出现'不完整的类型'编译错误的根本原因。通过分步排查,指导开发者统一Qt设计师对象名、自动生成文件类名及代码引用名,并提供强制重新编译UI文件、清理中间文件等解决方案,有效解决此类常见编译问题。

weixin_29009339的博客 248

使用3sigma原则去除数据表中的极端值

本文使用3sigma解决数据表中出现的极端值问题,其中包括基本原理、使用原则(检验方法)、代码展示这3个部分

qq_51397866的博客 4380

c语言创建一个长度为10的链表,C语言链表基本操作(10页)-原创力文档

// 链表操作 :建立、插入、删除、查找、倒置、删除等基本操作// 喜洋洋制作#include #include typedefstruct LNode{int data;struct LNode *next;}LNode,*Llist;LNode *creat_head(); // 创建一个空表void creat_list(LNode *, ...

weixin_32000561的博客 1037

【TouchDesigner】三维渲染

Cmera COMP Uniform Scale(按比例缩放):沿x,y,z三个轴等比例缩放相机(通常不建议改变相机大小)。 Constrain To(约束到):让相机附属到某个指定元件上,跟随指定元件运动。 Look At(朝向):让相机在移动过程中始终面对指定的元件。 Pah SOP(相机的路径):输入SOP元件名字,为相机指定移动路径。 Geometry Comp Geometry COMP中的参数与Camera COMP中的参数用法大部分都相似。特殊的是它的instacne页面的

wangpuqing1997的博客 5459

c语言建立链表叫LNode,C语言链表基本操作

链表的建立、插入、查找、倒置、删除等操作//链表操作:建立、插入、删除、查找、倒置、删除等基本操作//喜洋洋制作#include#includetypedefstructLNode{intdata; structLNode *next;}LNode,*Llist;LNode *creat_head();//创建一个空表void creat_list(LNode *,int);//创建一个长度为n的...

weixin_32999557的博客 1427

GEE生物量预测:利用多源遥感数据和随机森林算法RF构建地上生物量(AGB)预测模型,并实现未来年份的生态变化模拟(大面积生物量反演)

数据融合策略:整合5类遥感产品(AGB、NDVI、LAI、土地覆盖、地形)时序特征构建:采用生长季中值法降低云污染影响机器学习优化分层采样保证数据代表性80棵决策树平衡精度与效率预测可靠性基准期R²达0.76需结合地面实测数据校正。

此星光明博客 419

Python爬虫实战:如何爬取12306列车信息

本文介绍了如何使用Python编写爬虫,抓取12306列车信息。我们讲解了如何分析12306的列车数据接口,如何发送HTTP请求,解析返回的JSON数据,并将数据保存到本地文件中。我们还讨论了如何绕过反爬虫机制,如使用随机User-Agent和设置请求延时。通过这个实战项目,你应该掌握了如何爬取并解析来自公共API的数据,同时提高了你的爬虫技能。这些技能不仅适用于12306列车信息抓取,也可以广泛应用于其他需要抓取JSON数据的网站。

2201_76125261的博客 1922

在c语言中链表事例,C语言链表实例(转载)

//链表操作:建立、插入、删除、查找、倒置、删除等基本操作//喜洋洋制作#include#includetypedef struct LNode{int data;struct LNode *next;}LNode,*Llist;LNode *creat_head();//创建一个空表void creat_list(LNode *,int);//创建一个长度为n的线性链表void insert_...

weixin_39965673的博客 283

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

c语言链表头指针,C语言 头指针单链表

初学者,有错误请指正,谢谢!C语言头指针单链表实现:#include#include#includetypedef int ElemType;typedef struct LNode{ElemType data;struct LNode *next;}LNode,*LinkList;//创建一个空表LinkList CreateList(LinkList L){LinkList p=NULL;if...

weixin_31764271的博客 912

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【数据结构与算法】程序内功篇三--单链表

程序内功篇三--单链表一、线性表的链式存储结构1、链表含义2、结点类型描述3、链表结点用法与创建二、单链表的基本相关算法1、建立单链表2、链表查找3、链表遍历4、链表结点的插入5、链表结点的删除6、链表删除三、相关单链表的题1、单链表倒置2、相邻两结点最大值3、有序排列问题 一、线性表的链式存储结构 1、链表含义 将线性表L=(a0,a1,……,an-1)中各元素分布在存储器的不同存储块,称为结点,通过地址或指针建立元素之间的联系 结点的data域存放数据元素ai,而next域是一个指针,指向ai的

修成真的博客 2308

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

线性单链表

文章目录数据结构—P3线性单链表简介线性表链表实现创建单链表结构体创建表函数销毁表函数表尾插入函数查询显示表函数优化插入操作查询操作删除操作修改操作扩展排序(从大到小)表倒置排序(从小到大)整体代码更多内容 数据结构—P3线性单链表 简介 线性表 概念 线性结构中的数据元素之间是一对一的关系,线性表(List)表示零个或多个数据元素的有限序列 若将线性表记为(data(1)…data(n)),...

CagePan的博客 637
上一篇: C语言实现两个变量交换值
下一篇: RedHat7.4安装mysql 5.7.21
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值