栈和队列及习题讲解1

发布时间:2026/9/1 4:44:04

栈和队列及习题讲解1
从内存先拿到寄存器运算完再放回内存①int ret1 i;前置自增mov eax,dword ptr [i] ; 把i从内存读到eax add eax,1 ; eax eax 1 【先自增】 mov dword ptr [i],eax ; 把1后的值写回i内存 mov ecx,dword ptr [i] ; 读取已经更新完的i mov dword ptr [ret1],ecx; 把**自增之后**的值赋给ret1逻辑先 再赋值ret1 拿到的是 i 增加完成后的新值。②int ret2 i;后置自增mov eax,dword ptr [i] ; 读取i原始旧值 mov dword ptr [ret2],eax; 【先把旧值赋值给ret2】 mov ecx,dword ptr [i] ; 再读i旧值 add ecx,1 ; ecx ecx1 mov dword ptr [i],ecx ; 写回i完成i自增要实现的接口size永远代表有效元素数量全世界教材统一。空表size 0最后一个有效元素下标size‑1新元素插在表尾data[size] x;栈的 top 为什么会有两套栈的top存的是数组下标不是计数下标本身就有两种理解所以诞生两套流派top0top 是下一个可存放位置的下标等价于顺序表的 sizetop-1top 是当前栈顶元素的下标入栈需要拿掉栈顶元素才能访问下一个括号的匹配最后也排除了左括号多的情况出栈可以和入栈顺序不同但出队和入队顺序一定相同/ 入队需要二级指针 QNode**原先的void QueuePush(QNode** pphead, QNode** pptail, QDataType x){// 创建新节点QNode* newnode (QNode*)malloc(sizeof(QNode));//...if(*pphead NULL){*pphead newnode; // 修改外部phead本身*pptail newnode; // 修改外部ptail本身}else{(*pptail)-next newnode;*pptail newnode;}}// 调用的时候要传地址QueuePush(phead, ptail, 10);成为成员之后只需要传结构体的地址void QueuePush(Queue* pq, QDataType x){QNode* newnode (QNode*)malloc(sizeof(QNode));//...if(pq-phead NULL){pq-phead newnode;pq-ptail newnode;}else{pq-ptail-next newnode;pq-ptail newnode;}}//调用只传结构体地址一级指针Queue q;QueueInit(q);QueuePush(q,10);防止只有一个节点free以后ptail是野指针的问题一定要防止野指针的出现就是phead和ptail因为后面的接口要访问他们的成员用两个队列实现栈往空的里面插入底层结构1. 入栈push—— O(1)cvoid myStackPush(MyStack* obj, int x) { if(!QueueEmpty(obj-q1)) { QueuePush((obj-q1), x); // q1 非空入 q1 } else { QueuePush((obj-q2), x); // q1 空入 q2不管 q2 是否为空 } }✅ 两个队列都为空时默认入 q2因为 q1 空走 else2. 出栈pop—— O(n)核心轮转你的假设法非常经典c// 先假设 q1 是空q2 是非空 Queue* empty (obj-q1); Queue* nonEmpty (obj-q2); // 检查假设是否正确如果 q1 非空说明假设反了 if(!QueueEmpty((obj-q1))) { nonEmpty (obj-q1); empty (obj-q2); }然后轮转c// 把 nonEmpty 中除了最后一个元素外全部搬到 empty while(QueueSize(nonEmpty) 1) { QueuePush(empty, QueueFront(nonEmpty)); QueuePop(nonEmpty); } // 此时 nonEmpty 只剩一个元素就是栈顶弹出它 int top QueueFront(nonEmpty); QueuePop(nonEmpty); return top;3. 取栈顶top—— 利用队列的队尾接口cint myStackTop(MyStack* obj) { if(!QueueEmpty((obj-q1))) { return QueueBack((obj-q1)); // 非空队列的队尾就是栈顶 } else { return QueueBack((obj-q2)); } }这里用了一个关键点队列的队尾back正好对应栈顶因为入栈时元素都在队尾追加。多开一个空间解决判空和判满相重合的问题解决回绕问题两种取尾的数据结果一样删除和增加都要有回环的能力获取头的数据比尾部简单因为尾部是有效节点的下一个位置就是包含加减的都会比较麻烦因为有回环的问题链表判断空很简单但是取尾部很麻烦

相关新闻

京东技术通用岗秋招笔试复盘:题型、考点与备考策略

京东技术通用岗秋招笔试复盘:题型、考点与备考策略

2026/9/1 4:34:04

1. 技术通用岗笔试在秋招里的真实定位——先搞懂它筛什么人 先说个扎心的事实:2023年秋招的技术岗笔试, 淘汰率高得离谱 。尤其是京东这种体量的公司,第一批笔试的投递量基本是几万份起跳,技术通用岗位作为覆盖面最广的入口&…

中石油2025春招笔试模拟卷3解析:行测英语综合知识全攻略

中石油2025春招笔试模拟卷3解析:行测英语综合知识全攻略

2026/9/1 4:34:04

中国石油2025春招笔试的模拟卷刷到第3套,说实话,到这个阶段很多人的状态已经从“这题怎么做”变成了“这题怎么又错了”。如果你也是冲着中石油的春招offer来的,那这套模拟卷3的定位就非常明确:不是让你图个心安,而是逼…

【基于 Paperless-ngx 架构的企业智能单据与合同 OCR 检索中枢】基于 Spring Boot + Vue3 的设计与实现(含PRD/三端高保真源码/大屏)

【基于 Paperless-ngx 架构的企业智能单据与合同 OCR 检索中枢】基于 Spring Boot + Vue3 的设计与实现(含PRD/三端高保真源码/大屏)

2026/9/1 4:34:04

【基于 Paperless-ngx 架构的企业智能单据与合同 OCR 检索中枢】基于 Spring Boot Vue3 的设计与实现(含PRD/三端高保真源码/大屏) 🤖 创作声明:本文部分系统架构设计与场景推演由 AI 辅助分析生成,所有三端工程源码、…

华为AI岗面试备考全攻略:机试、大模型与Agent实战指南

华为AI岗面试备考全攻略:机试、大模型与Agent实战指南

2026/9/1 6:04:08

时间点很微妙——2026年7月24号,华为AI岗。如果你是在准备这一天的面试、机试或者入职,那这篇文章就是写给你看的。华为的AI岗位,不管是OD(外包研发)还是正式校招/社招,考察逻辑和准备路径其实有很强的共性…

2027届想进大模型圈?收藏这份1068份JD拆解,小白程序员也能轻松拿下!

2027届想进大模型圈?收藏这份1068份JD拆解,小白程序员也能轻松拿下!

2026/9/1 6:04:08

本文通过分析1068份大模型岗位JD,指出代码、算法、框架和项目经验比论文更重要,并详细解析了LLM与Agent岗位所需的核心技能和职业路径。文章强调,无论应聘哪类岗位,扎实的系统基础和项目成果是关键,建议按照Python/PyT…

2026年大厂Agent开发岗真实门槛深度拆解:收藏必备,小白程序员进阶指南

2026年大厂Agent开发岗真实门槛深度拆解:收藏必备,小白程序员进阶指南

2026/9/1 6:04:08

本文深入剖析了大厂Agent开发岗位的真实门槛,指出许多程序员仅会使用LangChain、LangGraph等框架并跑通Demo是不够的。文章强调工程能力和业务理解的重要性,详细阐述了架构设计、Tool Calling、线上稳定性、成本优化等方面的关键要求。文章指出&#xff…

小白程序员必看:AI智能体开发秘籍——Agent Harness入门指南

小白程序员必看:AI智能体开发秘籍——Agent Harness入门指南

2026/9/1 6:04:08

本文深入浅出地介绍了AI Agent Harness的概念及其重要性,阐述了模型、智能体和Harness三者之间的关系。详细解析了Harness如何通过工具访问边界、记忆管理、风险护栏、可观测性和恢复机制等,将AI模型转化为实用的智能体。文章还介绍了Harness的工作原理和…

SpringBoot企业资产管理系统实战:从部署到核心设计全解析

SpringBoot企业资产管理系统实战:从部署到核心设计全解析

2026/9/1 6:04:08

简介:这是一套面向Java初学者与课程设计学生的SpringBoot企业级项目源码,聚焦固定资产全生命周期管理场景,解决中小企业资产登记、折旧计算、维修跟踪、报废处置及财务报表生成等核心业务痛点。资源为ZIP压缩包,共含若干Java源文件…

STC89C52RC与DS18B20数码管温度显示系统设计

STC89C52RC与DS18B20数码管温度显示系统设计

2026/9/1 5:54:07

简介:本资源是一套基于STC89C52RC单片机的DS18B20数字温度测量与数码管动态显示完整实践工程,面向电子类专业本科生、单片机初学者及课程设计开发者,解决温度采集、单总线通信、多位数码管驱动与实时显示等典型嵌入式开发问题。压缩包共26个文…

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

2026/9/1 1:53:39

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

2026/8/31 7:20:57

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

2026/8/31 17:18:46

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

远程协作的工作台整理

远程协作的工作台整理

2026/9/1 0:03:36

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/1 0:03:36

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/1 0:03:36

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

远程协作的工作台整理

远程协作的工作台整理

2026/9/1 0:03:36

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/1 0:03:36

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/1 0:03:36

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…