链表的有序构建和查找

2023-10-27

题目描述

单链表结点的存储结构包含两部分:数据、下一结点指针(默认为空)。

单链表包含头结点,存储实际数据的结点位置从1开始。

现输入一批无序的整数队列,编写程序完成以下要求

1)构建单链表并且把数据按递增顺序插入到链表中,并且统计非空指针发生变化的次数。

例如在初始只包含头结点的单链表中,依次插入3和2

当把3插入时,是头结点的next指针发生变化,初始头结点的next指针是空的,现在指向3的结点,所以不计入指针变化次数。

当把2插入时,它是插入到头结点和3结点之间,这时候头结点的next指针从指向3变成指向2,因此这次计入指针变化次数。

总之,如果是把一个空的next指针指向新的结点,则不计入变化次数;如果是把一个非空next指针修改指向新结点则计入变化次数。

2)实现对单链表的元素查找。输入一个链表位置,返回该位置对应的数据。如果位置非法则输出提示信息,看样例。

要求:必须使用单链表结构实现上述要求,并且不能用第三方算法库或容器类对象

输入

第一行:第一个数字n表示样本数目,其后跟n个样本。

第二行:查找测试次数m 后跟m个待查找的位置。

输出

第一行输出构建链表过程中,非空指针变化的总次数,格式看样本

第二行输出单链表创建后,从头到尾依次输出链表中元素数据

第三行到第n+1行,对每个查找位置,若结点存在,输出结点数据;否则输出error

输入样例1 

6 1 8 5 2 4 3
4 0 2 10 6

输出样例1

非空指针变化4次
1 2 3 4 5 8
error
2
error
8

思路分析

就是链表题,建立单向链表,链表元素的插入和查找。

建立起带头节点的链表,完了之后,记录一下空指针变换的次数即可。

AC代码

#include <iostream>
using namespace std;
struct Node{
    int data;
    Node*next=NULL;
};
class List{
    Node*head=new Node();
    int size=0,count=0;
public:
    void insert(int&data){
        Node*new_one=new Node();
        new_one->data=data;
        Node*h=head;
        while(h->next&&h->next->data<data){
            h=h->next;
        }
        new_one->next=h->next;
        if(h->next)
            count++;
        h->next=new_one;
        size++;
    }
    bool find(int index,int&data){
        if(size<index||index<=0)
            return false;
        Node*h=head;
        while(index&&h->next){
            h=h->next;
            index--;
        }
        data=h->data;
        return true;
    }
    void show(){
        cout<<"非空指针变化"<<count<<"次"<<endl;
        Node*h=head;
        while(h->next->next){
            h=h->next;
            cout<<h->data<<' ';
        }
        cout<<h->next->data<<endl;
    }
};
int main() {
    int t,temp,data;
    List list;
    cin>>t;
    while(t--){
        cin>>temp;
        list.insert(temp);
    }
    list.show();
    cin>>t;
    while(t--){
        cin>>temp;
        if(list.find(temp,data))
            cout<<data<<endl;
        else
            cout<<"error"<<endl;
    }
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

链表的有序构建和查找 的相关文章

随机推荐

  • 力扣刷题 每日两题(一)

    一 力扣20题 class Solution object def isValid self s type s str rtype bool if len s 0 return True stack for c in s if c or c
  • FISCO-BCOS 一、默认配置搭建区块链网络

    一 采用默认配置搭建区块链网络 1 安装openssl ubuntu依赖 sudo apt install y openssl curl 2 创建操作目录 下载安装脚本 cd mkdir p fisco cd fisco 3 搭建单群组4节
  • 面试分享

    在软件测试的面试过程中 经常会出一些测试基础的问题 以此来评估应聘者的基本测试功底和知识储备 下面我就为大家整理了一些软件测试常见面试题及答案 仅供参考 之前的推文也有分享过相关的软件测试面试题 正在准备面试的小伙伴们可以进入本公众号 面试
  • flutter内存泄漏常见分析

    内存泄漏是Flutter中的一个常见问题 以下是一些可能导致内存泄漏的情况和注意事项 未释放控制器 在使用一些控制器 如AnimationController TextEditingController等 时 需要在不需要时及时释放控制器
  • 创建线程的方式打开记事本

    更好的阅读体验 huge color red 更好的阅读体验 更好的阅读体验 今天操作系统课老师讲到进程 提出了一个有趣的小实验 能否以系统调用的方式利用 Windows 创建进程的系统调用函数来打开一个软件 闲着蛋疼的我立马来了兴趣 姑且
  • unity开发VR,没有VR设备解决方式

    文章目录 前言 一 环境搭建 1 普通VR环境搭建 2 虚拟相机搭建 二 模拟相机的操作 总结 前言 开发实例环境为unity2018 4 11 VRTK3 3 0 steamVR1 2 23 当我们身边没有HTC VIVE设备时我们不能去
  • Android Studio中的mavenCentral、jcenter、google仓库

    一 Android Studio中依赖是从哪里得到 是从工程的build gradle里面定义的Maven仓库服务器去下载library的 总的来说 只有两个标准的Android library文件服务器 mavenCentral和jcen
  • AES加密和解密详解

    本文使用的是cyrpto js库 以AES CBC为例 先安装cyrpto js cyrpto js是js专门用来加密和解密用到的一个库 第一步 先确认一下电脑是否有node和npm 输入node version显示 v 版本号就可以下一步
  • RPMB分区介绍

    RPMB Replay Protected Memory Block重放保护内存块 Partition 是 eMMC 中的一个具有安全特性的分区 eMMC 在写入数据到 RPMB 时 会校验数据的合法性 只有指定的 Host 才能够写入 同
  • Java之解压Tar.gz和Gz文件到指定的目录下

    工作中的需求 需要读取指定路径下的压缩文件 然后解压到指定的目录下 引入maven依赖
  • msvcp140.dll丢失的4个解决方法,msvcp140.dll丢失的常见原因

    msvcp140 dll是Windows操作系统中的一个动态链接库文件 由Microsoft Visual C 程序库所提供 它包含了许多C 函数和类的定义 可以为应用程序提供一些基本服务 比如内存管理 文件输入 输出和网络连接等功能 我们
  • phpstorm表单递交post出错get正确的解决方法

    好吧 这是我第二次因为这个问题搞得凌晨才睡觉 这次一定要记录下来 phpstorm版本2016 1 1 问题详细描述 在html写好表单之后以post方式递交给php文件 返回结果在谷歌浏览器是 Automatically populati
  • Allegro如何做镂空丝印操作指导

    Allegro如何做镂空丝印操作指导 在PCB设计丝印的时候 会需要画镂空的丝印 Allegro升级到了172版本的时候 可以画镂空的丝印 如下图 具体操作如下 选择Shape Add Rect命令 Options选择需要画到的层面 比如S
  • nginx文档合集

    1 nginx documentation 2 14个Nginx的核心功能点 建议收藏 3 Nginx之负载均衡模块 ngx http upstream module 途径日暮不赏丶的博客 CSDN博客 4 tomcat redis ses
  • 华为OD机试 - 完美走位(Python)

    完美走位 题目描述 输入一个长度为4的倍数的字符串 字符串中仅包含WASD四个字母 将这个字符串中的连续子串用同等长度的仅包含WASD的字符串替换Q 如果替换后整个字符串中WASD四个字母出现的频数相同 那么我们称替换后的字符串是 完美走位
  • Android Studio 快捷键盘

    Alt 回车 导入包 自动修正 Crtl X 剪贴 删除本行 之前用Eclipse Ctrl D 就是删除 在AndroidStudio 中是复制本行到下一行 找了好久都没找到删除本行快捷键的 汗 Ctrl N 查找类 Ctrl Shift
  • CTO、技术总监、首席架构师的区别

    一 高级程序员 如果你是一个刚刚创业的公司 公司没有专职产品经理和项目经理 你就是公司的产品经理 你如果对你现在的开发员能力不满 那么你只需要的是一个高级程序员 你定义功能 你做计划推进和管理 他可以带1 2个副手把你规划的功能实现了 他是
  • PostgresSQL 用linux命令重启时出错:pg_ctl: server does not shut down

    出错原因 在建一个新的数据库 然后restore好久都没成功 就把服务器直接关掉重启了 然后通过linux去重启数据库就一直不成功 下面是出错信息和解决步骤 用service postgresql restart去重启数据库 总是报以下错误
  • 长/短 链接/轮询 和websocket

    短连接和长连接 短连接 http协议底层基于socket的tcp协议 每次通信都会新建一个TCP连接 即每次请求和响应过程都经历 三次握手 四次挥手 优点 方便管理 缺点 频繁的建立和销毁连接占用资源 长连接 客户端和服务端之间只有一条TC
  • 链表的有序构建和查找

    题目描述 单链表结点的存储结构包含两部分 数据 下一结点指针 默认为空 单链表包含头结点 存储实际数据的结点位置从1开始 现输入一批无序的整数队列 编写程序完成以下要求 1 构建单链表并且把数据按递增顺序插入到链表中 并且统计非空指针发生变