当前位置: 首页 > news >正文

P3156 【深基15.例1】询问学号

        昨天我发布了关于数据结构线性表的学习知识(【数据结构】顺序表-CSDN博客)。所谓“纸上得来终觉浅”,光看不练可不行,下面我们来看一下顺序表的习题。

 题目链接

【深基15.例1】询问学号 - 洛谷

题目解读

        题目描述了一个场景,有 n 名同学陆续进入教室,我们知道他们的学号,学号在 1 到 10^9 之间。按同学进入教室的顺序给出学号。

我们需要完成以下几个主要任务:

  1. 定义一个结构体 SeqList 来表示存储学号的顺序表,其中包含学号数组 number 、最大容量 capacity 和有效数字个数 size 。
  2. 编写 init 函数来初始化顺序表。
  3. 编写 checkcapacity 函数来检查顺序表的容量,如果容量不足则进行扩容。
  4. 编写 insert 函数向顺序表中插入(尾插)学号。

听起来不难,那么下面开始写代码。

代码详解

    1.定义SeqList结构体

        结构体的定义和初始化都不难,咱们不过多解释,有问题可以在评论区讨论。

typedef struct SeqList
{int* number;//学号int capacity;//最大容量int size;//有效数字个数
}SL;

   2.初始化函数

void init(SL* p)
{p->number=NULL;p->capacity=0;p->size=0;
}

    3.检测容量足够与否并扩容

        整体来说不难理解,看一下注释应该不成问题。唯一的难点可能是有些同学不懂realloc的用法,博主将它的用法放在了疑难解答,大家可以自行学习。

/*** 检查并调整顺序表的容量* p 指向顺序表结构体的指针*/
void checkcapacity(SL* p)
{// 如果指针为空,输出错误信息并退出程序if(p == NULL){cout << "未检查到指针所指向数据" << endl;exit(1);}// 如果当前容量等于元素个数if(p->capacity == p->size){// 计算新的容量,如果当前容量为 0,则新容量为 4,否则新容量为当前容量的 2 倍int newcapacity = p->capacity == 0? p->capacity = 4 : 2 * p->capacity;// 重新分配内存空间int* ps = (int*)realloc(p->number, newcapacity * sizeof(int));// 如果重新分配内存失败if(ps == NULL){perror("realloc fail");exit(1);}// 更新顺序表的指针和容量p->number = ps;p->capacity = newcapacity;}
}

    4.尾插函数

参数含义:

  • p:是指向顺序表结构体的指针,用来操作顺序表的相关数据。
  • x:要添加到顺序表末尾的数据。
/*** 向顺序表中插入一个元素* p 指向顺序表结构体的指针* x 要插入的元素值*/
void insert(SL* p, int x)
{// 如果指针为空,输出错误信息并退出程序if(p == NULL){cout << "初始化失败" << endl;exit(1);}// 检查并调整顺序表的容量checkcapacity(p);// 将元素插入到顺序表中,并增加元素个数p->number[p->size++] = x;
}

 完整代码

#include<bits/stdc++.h>
#include<assert.h>
using namespace std;
typedef struct SeqList
{int* number;//学号int capacity;//最大容量int size;//有效数字个数
}SL;
void init(SL* p)
{p->number=NULL;p->capacity=0;p->size=0;
}
void checkcapacity(SL* p)
{if(p==NULL){cout<<"未检查到指针所指向数据"<<endl;exit(1);}if(p->capacity==p->size){int newcapacity=p->capacity==0?p->capacity=4:2*p->capacity;int* ps=(int*)realloc(p->number,newcapacity*sizeof(int));if(ps==NULL){perror("realloc fail");exit(1);}p->number=ps;p->capacity=newcapacity;}
}
void insert(SL* p,int x)
{if(p==NULL){cout<<"初始化失败"<<endl;exit(1);}checkcapacity(p);p->number[p->size++]=x;
}
main()
{SL s;init(&s);int n;int m;cin>>n>>m;for(int i=0;i<n;i++){int x;cin>>x;insert(&s,x);}for(int i=0;i<m;i++){int x;cin>>x;cout<<s.number[x-1]<<endl;}      
}

    AC 

 

 疑难解答

     realloc的用法

realloc 函数用于重新分配内存块的大小。

函数原型:void *realloc(void *ptr, size_t size);

参数含义:

  • ptr:指向之前通过 malloc、calloc 或 realloc 分配的内存块的指针。
  • size:新的所需内存大小。

用法及作用:

  • 如果 ptr 为 NULL,则 realloc 的功能类似于 malloc,分配指定大小的内存。
  • 如果 size 为 0 且 ptr 不为 NULL,则相当于释放 ptr 指向的内存,类似于 free 函数。
  • 否则,realloc 尝试改变之前分配的内存块的大小。如果有足够的连续空间可扩展现有内存块,会在原地进行扩展并返回原指针。如果没有足够的连续空间,会分配新的内存块,将原有数据复制到新位置,并释放旧的内存块,然后返回新的指针。

例如:

#include <stdio.h>
#include <stdlib.h>int main() 
{int *ptr = (int *)malloc(sizeof(int) * 5);  // 分配 5 个整数的内存// 填充一些数据for (int i = 0; i < 5; i++) {ptr[i] = i;}int *newPtr = (int *)realloc(ptr, sizeof(int) * 10);  // 重新分配为 10 个整数的内存if (newPtr!= NULL) {ptr = newPtr;  // 更新指针// 继续使用扩展后的内存for (int i = 5; i < 10; i++) {ptr[i] = i;}// 输出数据for (int i = 0; i < 10; i++) {printf("%d ", ptr[i]);}printf("\n");free(ptr);  // 释放内存} else {printf("Reallocation failed!\n");//创建失败提示信息}return 0;
}

相关文章:

P3156 【深基15.例1】询问学号

昨天我发布了关于数据结构线性表的学习知识&#xff08;【数据结构】顺序表-CSDN博客&#xff09;。所谓“纸上得来终觉浅”&#xff0c;光看不练可不行&#xff0c;下面我们来看一下顺序表的习题。 题目链接 【深基15.例1】询问学号 - 洛谷 题目解读 题目描述了一个场景&…...

详解Xilinx FPGA高速串行收发器GTX/GTP(5)--详解8B10B编解码

目录 1、8B/10B编码是什么? 2、8B/10B编码的规则 3、两个例子 4、GTX的8B/10B编码 5、Verilog实现 文章总目录点这里:《FPGA接口与协议》专栏的说明与导航 1、8B/10B编码是什么? 简单来说,8B/10B编码就是将原本是8bits的数据,按照一定的规则扩展编码到10b…...

python 画多盘的写放大曲线方法

在服务器测试中我们经常会遇见客户要求画出每个SSD的WAF曲线&#xff0c;也就是写放大&#xff0c;通常的做法就是我们每隔10分钟记录一下每个SSD的host写入量和nand写入量&#xff0c;下面我们介绍一下python处理多盘的WAF的做法 如图所示 假设这是一个记录多盘的写入量信息的…...

计算机网络TCP/UDP知识点

这是一些在学习过程中关于计算机网络八股文的一些知识点记录&#xff1a; TCP/UDP TCP怎么保证可靠性 1.序列号&#xff0c;确认应答&#xff0c;超时重传 数据到达接收方&#xff0c;接收方需要发出一个确认应答&#xff0c;表示已经收到该数据段&#xff0c;并且确认序号…...

JavaScript 文档元素获取

目录 通过id获取文档元素 任务描述 相关知识 什么是DOM 文档元素 节点树 通过id获取文档元素 编程要求 通过类名获取文档元素 任务描述 相关知识 通过类名获取文档元素 编程要求 通过标签名获取文档元素 任务描述 相关知识 通过标签的名字获取文档元素 获取标…...

docker pull实现断点续传

问题背景 在使用Docker拉取DockerHub的镜像时&#xff0c;经常会出现网络不稳定的问题&#xff0c;这就导致拉取到一半的镜像会重新拉取&#xff0c;浪费时间。例如下面这种情况&#xff1a; 第二次拉取 这是一个网络中断的场景&#xff0c;第二次重新拉取的时候&#xff0c;同…...

无字母数字webshell之命令执行

源码 题目限制&#xff1a; webshell长度不超过35位除了不包含字母数字&#xff0c;还不能包含$和_ 这里使用php5来解决 可以围绕以下两点展开&#xff1a; shell下可以利用.来执行任意脚本Linux文件名支持用glob通配符代替 .或者叫period&#xff0c;它的作用和source一样…...

华为OD笔试

机试总分400。三道题目。100&#xff0b;100&#xff0b;200 华为od考试时间为150分钟&#xff0c;共有三道编程题&#xff0c;分数分别为100、100和200。如果你是目标院校&#xff08;查看目标院校请戳&#xff09;的话&#xff0c;及格线是160分&#xff0c;非目标院校则不确…...

HAProxy理论+实验

目录 一、基于cookie的会话保持 1、配置选项 2、配置示例 3、验证cookie信息 二、IP透传 1、layer4 与 layer7 &#xff08;1&#xff09;四层:IPPORT转发 &#xff08;2&#xff09;七层:协议内容交换 三、haproxy的ACL应用 1、ACL配置选项 &#xff08;1&#xf…...

Spring Boot ⽇志

1. ⽇志概述 为什么要学习⽇志 ⽇志对我们来说并不陌⽣, 从JavaSE部分, 我们就在使⽤ System.out.print 来打印⽇志了. 通过打 印⽇志来发现和定位问题, 或者根据⽇志来分析程序的运⾏过程. 在Spring的学习中, 也经常根据控制台 的⽇志来分析和定位问题. 随着项⽬的复杂…...

最详细!教你学习haproxy七层代理

一、工作原理 &#xff08;1&#xff09;包括 监听端口&#xff1a;HAProxy 会在指定的端口上监听客户端的请求。 例如&#xff0c;它可以监听常见的 HTTP 和 HTTPS 端口&#xff0c;等待客户端连接。请求接收&#xff1a;当客户端发起请求时&#xff0c;HAProxy 接收到请求。…...

ElementUI 事件回调函数传参技巧与自定义参数应用

ElementUI 事件回调函数传参技巧与自定义参数应用 在使用elementUI时&#xff0c;事件回调函数传递参数是一个常见的需求。根据搜索结果&#xff0c;我们可以了解到两种主要的方法来传递自定义参数&#xff1a; 使用回调函数&#xff1a;当elementUI组件触发事件时&#xff0c…...

优化Next的webpack配置

众所周知&#xff0c;next的webpack打包实际上分成了两个部分&#xff0c;一个是服务器端、一个是客户端&#xff0c;我们这里的配置主要是针对客户端的配置。 目的在于降低_app.js包大小&#xff0c;合理划分基础包、工具包、常用方法包、拆分lodash按需引入效果。 拆分lodas…...

Q-Dir vs 传统文件管理器:为何开发者更偏爱这款神器?

前言 在这个信息爆炸的时代&#xff0c;我们每天都在与海量的文件和文件夹打交道&#xff1b;你是否曾经为了找一个文件而翻遍了整个硬盘&#xff1f;是否因为繁琐的文件夹操作而头疼不已&#xff1f;今天&#xff0c;就让我小江湖带你走进一个全新的世界——Q-Dir&#xff0c;…...

日常疑问小记录

1、在抢票过程中&#xff0c;有些人显示服务器崩溃而另一些人仍能访问&#xff0c;可能是由于以下几个原因&#xff1a; &#xff08;1&#xff09;负载均衡&#xff1a;服务器可能采用了负载均衡技术&#xff0c;将用户请求分配到多个服务器上。部分用户可能被引导到正常运行…...

Java Web —— 第四天(HTTP协议,Tomcat)

HTTP-概述 概念:Hyper Text Transfer Protocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则 特点: 1. 基于TCP协议:面向连接&#xff0c;安全 2.基于请求-响应模型的:一次请求对应一次响应 3. HTTP协议是无状态的协议: 对于事务处理没有…...

C++ list的基本使用

目录 1.list简要介绍 2. list的构造 3. list中迭代器的使用 (1). 双向迭代器与随机访问迭代器使用区别 4.判空、获取元素个数 5. list头、尾元素的访问 6. 插入与删除操作 (1). 头插头删&#xff0c;尾插尾删 (2). 插入&#xff0c;删除与清空 (3). 交换 7. list容器迭代…...

云中韧性:Spring Cloud服务调用重试机制深度解析

标题&#xff1a;云中韧性&#xff1a;Spring Cloud服务调用重试机制深度解析 在微服务架构中&#xff0c;服务间的调用可能会因为网络问题、服务不可达、资源竞争等原因失败。Spring Cloud作为微服务架构的主流实现框架&#xff0c;提供了一套完整的服务调用重试机制&#xf…...

83.SAP ABAP从前台找字段所在表的两种方法整理笔记

目录 方法1&#xff1a;F1查看技术信息 F1 技术信息 方法2&#xff1a;ST05开启跟踪 Activate Trace Input and save data Deactivate Trace Display Trace 分析你想要的表 方法1&#xff1a;F1查看技术信息 从前台找一个屏幕字段所在表&#xff0c;一般通过按F1来查找…...

docker为普通用户设置sudo权限

在 Linux 上使用 Docker 命令时&#xff0c;默认情况下需要 sudo 权限。这是因为 Docker 守护进程&#xff08;Docker daemon&#xff09;通常运行在 root 用户下&#xff0c;而访问和管理 Docker 守护进程的权限也默认被限制给 root 用户。 然而&#xff0c;为了方便日常使用…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...