数据结构5.0
大家好,今天是队列的知识哦~
目录
一、概念
1.0单链表
2.0双链表
3.0数组
二、队列的方法
1.0 offer方法
2.0 poll方法
3.0 peek方法
4.0 isEmpty方法
三、队列的题目
1.0 用队列实现栈
2.0 用栈实现队列
3.0 设计循环队列
一、概念
数组 、单链表和双链表都可以实现队列
1.0单链表
入栈操作:单链表是头插 时间复杂度O(1) 出栈操作:单链表是删除头节点
这样实现了 队列 先进先出的特点
2.0双链表
头插 尾删 可以实现队列
尾插 头删 也可以实现队列
只要保证特性满足 队列的特性即可
源码里面是尾插头删
3.0数组
队尾入 队头出 如果放到数组里面很难搞 队尾已经到了数组长度的极限了,队头删了还有空间
我们会发现 如果把数组前面当作队头 数组最后当作队尾
当队尾一直遍历到数组末尾 不能加数据了 但是随着队头出 数组还是有空间的呀
如果把数组卷起来 头尾相连 得到一个循环数组 这样就能更大化的利用空间了
这里我们的rear补药rear++
用下面这个公式可以是rear循环走:rear=(rear+1)%len front也一样 不会越界
有关这个部分的内容放到下面的题目里面了 622. 设计循环队列 - 力扣(LeetCode)
二、队列的方法
Queue是个接口,底层是通过链表实现的
方法预览:
1.0 offer方法
入队列 我们用的是双链表 源码里面的offer是用的头插法
所以逻辑和我们双链表的头插几乎一样
这个usedSize 可以搞一个
代码这里是尾插
下面是代码:
public void offer (int e){
ListNode newNode = new ListNode(e);
if(front ==null){front = rear = node;}else{last.next = node;node.prev = last;last = node;}uesdSize++;
}
2.0 poll方法
同理 类似双链表的删除头节点的方法
下面是代码:
public int poll(){if(front == null){return -1;}int ret = front.val;;if(front == rear){front = null;rear = null;usedSize--;}front = front.next;front.prev= null;usedSize--;return ret;}
3.0 peek方法
获取队头元素 也就是获取双链表头结点元素
要注意分情况讨论
public int peek(){if(front == null){return -1;}return front.val;}
4.0 isEmpty方法
public boolean isEmpty(){return usedSize == 0;
}
三、队列的题目
1.0 用队列实现栈
225. 用队列实现栈 - 力扣(LeetCode)
思路分析:
如何用队列实现栈呢? 如何用队列让先进的后出
方法有很多种 这里我们讲解一个方法 用交换法
两个队列 队列1和队列2 存入的时候 都存到queue1里面
要实现pop方法和top方法的时候 明确我们要删除的是后进的那个元素
我们将队列1添加的元素出队到队列2 剩下最后一个元素 (这个元素就是后进的那个)
用popped记录下后删除 然后交换队列把那些在队列2的元素交换回来
top方法的大体思路同样如此哦 这里就不再赘述了 多犯错误多调试比较快
class MyStack {Queue<Integer> queue1;Queue<Integer> queue2;public MyStack() {queue1 = new LinkedList<>();queue2 = new LinkedList<>();}public void push(int x) {queue1.offer(x);}public int pop() {while(queue1.size()>1){queue2.offer(queue1.poll());}int popped=queue1.poll();Queue<Integer> temp = queue1;queue1=queue2;queue2=temp;return popped;}// while(queue1.isEmpty()){// queue2.offer(queue1.getLast());// }// queue2.poll();public int top() {// return queue2.peek();while(queue1.size()>1) {queue2.offer(queue1.poll());}int top = queue1.peek();queue2.offer(queue1.poll());Queue<Integer> temp = queue1;queue1=queue2;queue2=temp;return top;}public boolean empty() {return queue1.isEmpty() && queue2.isEmpty();}}
2.0 用栈实现队列
232. 用栈实现队列 - 力扣(LeetCode)
思路分析:
要达到的目标是用栈模拟实现队列先进先出的结构
栈的结构是先进后出
我们可以用两个栈 一个用来push 一个用来pop和peek
我们要实现先进先出 把栈1里面的元素push到栈2里面
此时栈2的栈顶元素就是先进的元素 然后用栈2的pop方法peek方法就可以达到目的
要注意的点是:判断栈2是否为空
有时候 栈2的元素还没有pop完呢 栈1里面又加入新的元素了
这个时候我们pop也是从栈2里面出 毕竟栈2的元素比栈1早进
然后直到栈2为空了 我们想要pop了 再把栈1的元素push到栈2pop
所以pop方法和peek方法 要先判断栈2是否为空
下面是代码:
class MyQueue {private Stack<Integer> stack1;private Stack<Integer> stack2;public MyQueue() {stack1= new Stack<>();stack2= new Stack<>();}public void push(int x) {stack1.push(x);}public int pop() {if(empty()){return -1;}// 为什么要判断 stack是否为空呢 难道还能中途//确保stack1 的元素只会在stack为空时倒入 //如果stack1里面有元素 stack2里面也有元素 stack里面的早 所以弹stack2//stack2为空了再倒入if(stack2.isEmpty()){while(! stack1.isEmpty()) {stack2.push(stack1.pop());}}return stack2.pop();}public int peek() {if(empty()) return -1;if(stack2.isEmpty()) {while(! stack1.isEmpty()) {stack2.push(stack1.pop());}}return stack2.peek();}public boolean empty() {return stack1.isEmpty()&&stack2.isEmpty();}
}
3.0 设计循环队列
622. 设计循环队列 - 力扣(LeetCode)
我们定义了一个数组之后 开始往里面放元素呀
rear和front都在数组0下标 放入一个元素 队头front不变 队尾rear往后面加
这样直到数组满了 对应上面图片第一张 此时rear从7下标到了0小标 这个时候的处理方法有三种
第一种是 定义usedSize来记录 uedSize和len的比较
第二种是 可以使用标记 定义一个flag类型的变量 相遇的时候flag定义为false或者true
第三种是 浪费一个空间来区分 我们重点讲解这个内容
如果rear的下一个就是front 证明就是满的
rear如何实现 循环着走数组呢?
rear=(rear+1)%len; 这个公式满足了rear在数组里 面循环 不会出现数组越界异常
最后 front也得因为删除队列元素 而在数组里面循环 当然这个是后话
下面开始各种方法的讲解:
(1)判断满空的方法:为什么是rear=front呢 因为这里的rear和front因为数组是循环的
它们的位置不是固定的在开头
(2)判断满:用到rear的循环走公式碰到了front
就是要判断 (rear+1)%elem.length == front;
(3)构造器 为什么要k+1 呢 因为我们用的方法是浪费一个空间 所以创建的时候就多一个
这样就能有k个位置存放元素了
(4)入队 enQueue:入队的时候我们首先要判断满了没有 rear位置放上元素和rear位置的更新
要注意的地方是:我们不能使用rear++ 代码里面用哪个公式是为了 实现rear的循环
(5)出队 deQueue : 出队 我们首先要判断是不是空呢 注意出队的时候 直接更新front节点就可以
要注意的地方是:front 也得循环着走 所以也用到了那个公式
(6)从队首获得元素:这里的注意点是还是要提前判断循环队列是不是空的呢
(7)从队尾获得元素:这个要注意的是分类讨论 根据情况
如果rear的下标不是0 那么返回的是rear前面的元素 rear-1 前面我们也讲过 rear指向下一个
可插入的位置
如果rear的下标是0 那么返回的是 数组长度下标减一 这个特殊情况在图片上面有所呈现
下面是代码:
class MyCircularQueue {int rear ;//队尾下表int front ;//队头下标int elem[] ;public MyCircularQueue(int k) {//构造器 设置队列的长度为kthis.elem= new int[k+1];// rear= (rear+1)%elem.length;}public boolean enQueue(int value) {if(isFull()) {return false;}elem[rear]=value;//rear++; 这样容易越界rear= (rear+1)%elem.length;return true;}public boolean deQueue() {//出 front往后面走就可以了// 空的 不能出if(isEmpty()){return false;}//不空 front往后走front=(front+1)%elem.length;return true;}public int Front() {//从队首获得元素if (isEmpty()){return -1;}return elem[front];}public int Rear() {//得到队尾元素if (isEmpty()) {return -1;}int index = (rear == 0)? elem.length-1 : rear-1;return elem[index];}public boolean isEmpty() {return front == rear;}public boolean isFull() {if((rear+1)%elem.length == front){return true;}return false;}
}
以上 就是队列的知识咯~ 遍历一个节点
感谢大家的支持
更多内容还在加载中...........
如有问题欢迎批评指正,祝大家生活愉快、学习顺利!!!
相关文章:
数据结构5.0
大家好,今天是队列的知识哦~ 目录 一、概念 1.0单链表 2.0双链表 3.0数组 二、队列的方法 1.0 offer方法 2.0 poll方法 3.0 peek方法 4.0 isEmpty方法 三、队列的题目 1.0 用队列实现栈 2.0 用栈实现队列 3.0 设计循环队列 一、概念 数组 、单链表和双…...
Python字典:数据操作的核心容器
在Python编程生态中,字典(dict)是最常用且功能强大的内置数据结构之一。它以键值对(Key-Value Pair)的形式存储数据,为快速查找、灵活映射关系提供了天然支持。无论是数据清洗、算法实现还是Web开发&#x…...
Midjourney-V7:支持参考图片头像或背景生成新保真图
Midjourney-V7重磅升级Omni Reference:全能图像参考神器!再也不用担心生成图片货不对版了! 就在上周,Midjourney发版它最新的V7版本:Omini Reference,提供了全方位图像参考功能,它可以参考你提…...
【MySQL数据库】--SQLyog创建数据库+python连接
目录 1.连接本地数据库 2.创建数据库和表 3.使用 python读取数据 1.连接本地数据库 进入SQLyog 2.创建数据库和表 创建数据库gyp_test: CREATE DATABASE gyp_test CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; 创建表student_grade: CREATE TABLE …...
深入解析:思维链模型在大语言模型中的应用与实践
在人工智能领域,大语言模型的发展正以前所未有的速度改变着我们的生活和工作方式。从早期的文本生成到如今的复杂推理,模型的能力不断进化。而其中,思维链(Chain-of-Thought, CoT)技术的出现,更是为大模型的…...
服务器多客户端连接核心要点(1)
刷题 服务器多客户端连接核心要点 多进程服务器 实现原理 fork子进程:每次accept新客户端后,调用fork创建子进程。独立处理:子进程负责与客户端通信(如read/write),父进程继续监听新连接。 特点 隔离性…...
SIGIR 2025端到端生成式推荐ETEGRec
文章目录 1. 背景2. 方法2.1 框架图2.2 问题定义2.3 Item Tokenizer2.4 Generative Recommender2.5 ⭐️Sequence-Item Alignment2.6 ⭐️Preference-Semantic Alignment2.7 交替优化 3. 总结 现阶段 GRM 大多是两阶段的模型,第一阶段进行内容理解-行为语义对齐&…...
rust 中的 EBNF 介绍
在 rust 参考手册中,有大量类似: 句法 MacroInvocation :SimplePath ! DelimTokenTreeDelimTokenTree :( TokenTree* )| [ TokenTree* ]| { TokenTree* }TokenTree :Token排除 定界符(delimiters) | DelimTokenTreeMacroInvocationSemi :SimplePath ! (…...
解决 Redis 缓存与数据库一致性问题的技术指南
Redis 缓存与数据库一致性是分布式系统中常见的挑战,尤其在高并发场景下(如电商、用户管理、对账系统)。Redis 作为高性能缓存,常用于加速数据访问,但其与数据库(如 MySQL)之间的数据同步可能因…...
LlamaIndex 第六篇 SimpleDirectoryReader
SimpleDirectoryReader 是将本地文件数据加载到 LlamaIndex 的最简单方式。虽然在实际生产场景中,您更可能需要使用 LlamaHub 提供的多种数据读取器(Reader),但 SimpleDirectoryReader 无疑是快速入门的理想选择。 支持的文件类型…...
window 显示驱动开发-配置内存段类型
视频内存管理器(VidMm)和显示硬件仅支持某些类型的内存段。 因此,内核模式显示微型端口驱动程序(KMD)只能配置这些类型的段。 KMD 可以配置内存空间段和光圈空间段,其中不同: 内存空间段由保存…...
【人工智能学习之动作识别TSM训练与部署】
【人工智能学习之动作识别TSM训练与部署】 基于MMAction2动作识别项目的开发一、MMAction2的安装二、数据集制作三、模型训练1. 配置文件准备2. 关键参数修改3. 启动训练4. 启动成功 ONNX模型部署方案一、环境准备二、执行转换命令 基于MMAction2动作识别项目的开发 一、MMAct…...
PostgreSQL冻结过程
1.冻结过程 冻结过程有两种模式,依特定条件而择其一执行。为方便起见,将这两种模式分别称为惰性模式(lazy mode)和迫切模式(eager mode)。 并发清理(Concurrent VACUUM)通常在内部…...
SSHv2公钥认证示例-Paramiko复用 Transport 连接
在 Paramiko 中复用 Transport 连接时,若要通过 公钥认证(而非密码)建立连接,需手动加载私钥并与 Transport 关联。以下是详细操作步骤及完整代码示例: 步骤 1:加载私钥文件 使用 RSAKey 或 Ed25519Key 类…...
华为5.7机考-最小代价相遇的路径规划Java题解
题目内容 输入描述 输出描述 示例: 输入: 2 1 2 2 1 输出: 3 思路: Dijkstra 算法实现 dijkstra(int sx, int sy, int[][] dirs) 方法: 参数:起点坐标 (sx, sy) 和允许的移动方向 初始化࿱…...
element-ui分页的使用及修改样式
1.安装 npm install element-ui -S 2.在main.js中引入,这里是全部引入,也可以按需引入 import ElementUI from element-ui import element-ui/lib/theme-chalk/index.css Vue.use(ElementUI) 3.使用 layout"prev, pager, next, jumper" :jumpe…...
[Unity]-[UI]-[Image] 关于UI精灵图资源导入设置的详细解释
Unity UI Sprite UI资源导入详解图片导入项目Texture TypeTexture ShapeAdvanced Setting 高级设置 图片设置案例常见细节问题 知识点详解来源 UI资源导入详解 Unity中的UI资源有图片、矢量图、字体、预制体、图集、动画等等资源。 这其中图片是最重要以及最基础的资源组成&a…...
MLX-Audio:高效音频合成的新时代利器
MLX-Audio:高效音频合成的新时代利器 现代社会的快节奏生活中,对语音技术的需求越来越高。无论是个性化语音助手,还是内容创作者所需的高效音频生成工具,语音技术都发挥着不可或缺的作用。今天,我们将介绍一个创新的开…...
操作系统导论——第27章 插叙:线程API
关键问题:如何创建和控制线程? 操作系统应该提供哪些创建和控制线程的接口?这些接口如何设计得易用和实用? 一、线程创建 编写多线程程序的第一步就是创建新线程,因此必须存在某种线程创建接口。在 POSIX 中࿱…...
代采系统:定义、优势与未来趋势
一、代采系统的定义 代采系统是一种基于互联网的集中采购平台,它通过整合供应链资源,为中小企业或个人提供采购代理服务。商家可以在没有自己库存的情况下销售产品,当客户下单时,订单信息会自动或手动发送给供应商,由…...
后缀表达式+栈(详解)(c++)
前言 很抱歉,上一期没有介绍栈stack的用法,今天简要介绍一下,再讲讲后缀表达式,用stack栈做一些后缀表达式的练习。 栈 栈stack是c中系统给出的栈,有了它,就不用自己创建栈啦! 头文件 栈sta…...
Kaggle图像分类竞赛实战总结详细代码解读
前言 我是跟着李沐的动手学深度学习v2视频学习深度学习的,光看不做假把式,所以在学习完第七章-现代卷积神经网络之后,参加了一次李沐发布的Kaggle竞赛。自己动手,从组织数据集开始,到训练,再到推理&#x…...
开源AI对比--dify、n8n
原文网址:开源AI对比--dify、n8n-CSDN博客 简介 本文介绍开源AI工作流工具的选型。 对比 项difyn8n占优者学习难度简单中等dify核心理念用LLM构建应用。“连接一切”。以工作流自动化连接各系统。平手工作模式 Chatflow:对话。支持用户意图识别、上下…...
【SQL系列】多表关联更新
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
软件设计师教程——第一章 计算机系统知识(下)
前言 在竞争激烈的就业市场中,证书是大学生求职的重要加分项。中级软件设计师证书专业性强、认可度高,是计算机相关专业学生考证的热门选择,既能检验专业知识,又有助于职业发展。本教程将聚焦核心重点,以点带面构建知…...
华为银河麒麟 V10(ARM)系统软件部署全攻略:Redis、RabbitMQ、MySQL 等集群搭建指南
一、Redis 集群部署(主从 哨兵模式) 1. 环境准备 系统:华为银河麒麟 V10(ARM64)节点:3 台服务器(1 主 2 从 3 哨兵) 2. 安装包下载 bash # 华为镜像站 wget https://update.c…...
World of Warcraft [CLASSIC][80][Deluyia] [Fragment of Val‘anyr]
瓦兰奈尔的碎片 [Fragment of Valanyr] 有时候下个班打个游戏,没想到套路也这么多,唉,何况现实生活,这一个片版本末期才1000G,30个,也就30000G,时光徽章等同月卡15000G,折合一下也就…...
C++:求分数序列和
【描述】 有一个分数序列 2/1,3/2,5/3,8/5,13/8,21/13,.... 求这个分数序列的前n项之和。 输入 输入有一行:正整数n。 输出 输出有一行:分数序列的和(浮点数,精确到小数点后4位)。 【样例输入】 99 【样例输出】 160.4…...
支付宝沙盒模式商家转账经常出现 响应异常: 解包错误
2025年5月9日16:27:08 php8.3 laravel11 octane swoole加速 测试时不时就出现 响应异常: 解包错误 错误信息: Yansongda\Artful\Exception\InvalidResponseException: 响应异常: 解包错误 in /opt/www/vendor/yansongda/artful/src/Direction/CollectionDirect…...
第04章—技术突击篇:如何根据求职意向进行快速提升与复盘
经过上一讲的内容阐述后,咱们定好了一个与自身最匹配的期望薪资,接着又该如何准备呢? 很多人在准备时,通常会选择背面试八股文,这种做法效率的确很高,毕竟能在“八股文”上出现的题,也绝对是面…...
数据统计的意义:钱包余额变动
钱包余额变动统计的核心意义在于通过数据可视化实现资金流动的透明化管理,其价值主要体现在以下五个维度: 一、财务健康诊断() 资金流动可视化 通过期初/期末余额对比,可快速识别异常波动(如连续3个月余额…...
单调栈模版型题目(3)
单调栈型题目贡献法 基本模版 这是数组a中的 首先我们要明白什么叫做贡献,在一个数组b{1,3,5}中,连续包含1的连续子数组为{1},{1,3},{1,3,5},一共有三个,这三个数一共能组成6个连续子数组,而其…...
PostgreSQL 的 pg_advisory_lock 函数
PostgreSQL 的 pg_advisory_lock 函数 pg_advisory_lock 是 PostgreSQL 提供的一种应用级锁机制,它不锁定具体的数据库对象(如表或行),而是通过数字键值来协调应用间的并发控制。 锁的基本概念 PostgreSQL 提供两种咨询锁(advi…...
NLP基础
1. 基本概念 自然语言处理(Natural Language Processing,简称NLP)是人工智能和语言学领域的一个分支,它涉及到计算机和人类(自然)语言之间的相互作用。它的主要目标是让计算机能够理解、解释和生成人类语言…...
[AI Tools] Dify 工具插件上传指南:如何将插件发布到官方市场
Dify 作为开源的 LLM 应用开发平台,不仅支持本地化插件开发,也提供了插件市场机制,让开发者能够将自己构建的插件发布并供他人使用。本文将详细介绍如何将你开发的 Dify Tools 插件上传至官方插件市场,包括 README 编写、插件打包、仓库 PR 等核心步骤。 一、准备 README 文…...
Qt读写XML文档
XML 结构与概念简介 XML(可扩展标记语言) 是一种用于存储和传输结构化数据的标记语言。其核心特性包括: 1、树状结构:XML 数据以层次化的树形结构组织,包含一个根元素(Root Element)ÿ…...
htmlUnit和Selenium的区别以及使用BrowserMobProxy捕获网络请求
1. Selenium:浏览器自动化之王 核心定位: 跨平台、跨语言的浏览器操控框架,通过驱动真实浏览器实现像素级用户行为模拟。 技术架构: 核心特性: 支持所有主流浏览器(含移动端模拟) 精…...
C#黑魔法:鸭子类型(Duck Typing)
C#黑魔法:鸭子类型(Duck Typing) 如果它走起路来像鸭子,叫起来像鸭子,那么它就是鸭子。 鸭子类型,主要应用于动态语言类型,比如JS、Python等,核心理念为:关注对象的行为(方法或属性…...
2025 年数维杯数学建模B题完整论文代码模型
《2025 年数维杯数学建模B题完整论文代码模型》 B题完整论文 一、赛事背景与题目总览 2025 年第十届数维杯大学生数学建模挑战赛的 B 题聚焦于“马拉松经济的高质量发展思路探索”。近年来,我国马拉松赛事如同一颗颗璀璨的星星,在城市的天空中闪耀&am…...
C++23 中的 views::chunk:深入探索与应用
文章目录 一、views::chunk 的背景与动机二、views::chunk 的基本用法语法与参数示例代码 三、views::chunk 的高级用法处理不完整块与 views::drop 和 views::take 结合 四、性能分析五、应用场景1. 批量处理数据2. 分页显示3. 并行处理 六、与其他范围适配器的组合1. 与 view…...
库室指静脉人脸门禁机 LK-BM-S10C/JR
1、采用大于等于四核处理器,主频大于1G; 2、内存≥4G DDR3;存储≥8G 3、核心模块采用国产工业级处理芯片和嵌入式Android实时多任务系统,采用模块化设计,模块间通过标准接口相连; 4、大于等于10英寸电容屏…...
低成本自动化改造的18个技术锚点深度解析
执行摘要 本文旨在深入剖析四项关键的低成本自动化技术,这些技术为工业转型提供了显著的运营和经济效益。文章将提供实用且深入的指导,涵盖老旧设备联网、AGV车队优化、空压机系统智能能耗管控以及此类项目投资回报率(ROI)的严谨…...
线程中常用的方法
知识点详细说明 Java线程的核心方法集中在Thread类和Object类中,以下是新增整合后的常用方法分类解析: 1. 线程生命周期控制 方法作用注意事项start()启动新线程,JVM调用run()方法多次调用会抛出IllegalThreadStateException(线程状态不可逆)。run()线程的任务逻辑直接调…...
运维体系架构规划
运维体系架构规划是一个系统性工程,旨在构建高效、稳定、安全的运维体系,保障业务系统的持续运行。下面从规划目标、核心模块、实施步骤等方面进行详细阐述: 一、规划目标 高可用性:确保业务系统 724 小时不间断运行,…...
C++结构体介绍
结构体的定义 在C中,结构体(struct)是一种用户定义的数据类型,允许将不同类型的数据组合在一起。结构体的定义使用struct关键字,后跟结构体名称和一对花括号{},花括号内包含成员变量的声明。 struct Pers…...
RoPE长度外推:外插内插
RoPE:假定 α \alpha α是定值 其中一半位置是用cos表示的 cos ( k α − 2 i d ) \cos(k\alpha^{-\frac{2i}{d}}) cos(kα−d2i)(另一半是sin)(d是词嵌入维度) 当太长如何解决: 1 直接不管—外插 缺点:超过一定长度性能急剧下降。(较大时,对应的很多位置编码…...
牛客练习赛138-题解
牛客练习赛138-题解 https://ac.nowcoder.com/acm/contest/109081#question A-小s的签到题 题目描述 给定一个比赛榜单: 第一行是 n 个不同的大写字母,代表题号第二行是 n 个形如a/b的字符串,表示每道题的通过人数和提交人数 找到通过人…...
MySQL高可用方案全攻略:选型指南与AI运维实践
MySQL高可用方案全攻略:选型指南与AI运维实践 引言:当数据库成为业务生命线 在数字化时代,数据库就是企业的"心脏"。一次数据库宕机可能导致: 电商网站每秒损失上万元订单游戏公司遭遇玩家大规模流失金融系统引发连锁反应本文将为你揭秘: MySQL主流高可用方案…...
【库(Library)、包(Package)和模块(Module)解析】
在Python中,**库(Library)、包(Package)和模块(Module)**是代码组织的不同层级,而import语句的导入行为与它们密切相关。以下是详细对比和解释: 📦 1. 核心概…...
记录一次使用thinkphp使用PhpSpreadsheet扩展导出数据,解决身份证号码等信息科学计数法问题处理
PhpSpreadsheet官网 PhpSpreadsheet安装 composer require phpoffice/phpspreadsheet使用composer安装时一定要下载php对应的版本,下载之前使用php -v检查当前php版本 简单使用 <?php require vendor/autoload.php;use PhpOffice\PhpSpreadsheet\Spreadshee…...