【算法通关指南:数据结构和算法篇】栈的实现不用愁!数组 + 变量 n,新手也能 拿捏栈实现

【算法通关指南:数据结构和算法篇】栈的实现不用愁!数组 + 变量 n,新手也能 拿捏栈实现
在这里插入图片描述
🔥小龙报:个人主页
🎬作者简介:C++研发,嵌入式,机器人方向学习者
❄️个人专栏:《算法通关指南 》
永远相信美好的事情即将发生
在这里插入图片描述


文章目录


前言

本专栏聚焦算法题实战,系统讲解算法模块:以《c++编程》,《数据结构和算法》《基础算法》《算法实战》 等几个板块以题带点,讲解思路与代码实现,帮助大家快速提升代码能力
ps:本章节题目分两部分,比较基础笔者只附上代码供大家参考,其他的笔者会附上自己的思考和讲解,希望和大家一起努力见证自己的算法成长
在这里插入图片描述

一、栈的概念

栈是⼀种只允许在⼀端进行数据插入和删除操作的线性表。
(1)进行数据插入或删除的一端称为 栈顶,另⼀端称为栈底。不含元素的栈称为空栈。
(2) 进栈就是往栈中放入元素,出栈就是将元素弹出栈顶

ps: 栈其实是⼀个比较简单的数据结构。学习的重点在于用栈去解决问题,这也是难点。
【注意】
如果定义了⼀个栈结构,那么添加和删除元素只能在栈顶进行。不能随意位置添加和删除元素,这是栈这个数据结构的特性,也是规定。

二、栈的模拟实现

2.1创建

(1)本质还是线性表,因此可以创建⼀个足够大的数组,充当栈结构
(2)再定义⼀个变量n,用来记录栈中元素的个数,同时还可以标记栈顶的位置。

在这里插入图片描述
constint N =1e6+10;int stk[N];int n;

2.2进栈

这里依旧舍弃下标为0 的位置,有效元素从 1开始记录
进栈操作,那就把元素放在栈顶位置即可。
不必

在这里插入图片描述
//进栈voidpush(int x){ stk[++n]= x;}

时间复杂度:O(1)

2.3出栈

ps:不用真的删除元素,只用将元素个数减1,就相当于删除栈顶元素。

在这里插入图片描述
//出栈voidpop(){ n--;}

时间复杂度:O(1)

2.4栈顶元素

注意:因为栈特殊的规定,不⽀持遍历整个栈中的元素。因此,需要查找栈中元素的时候,只能查找到栈顶元素

在这里插入图片描述
// 栈顶元素inttop(){return stk[n];}

时间复杂度:O(1)

2.5判空

在这里插入图片描述
// 判空 bool empty(){return n ==0;}

时间复杂度:O(1)

2.6有效元素个数

在这里插入图片描述
// 栈中元素个数 intsize(){return n;}

时间复杂度:O(1)

2.7 所有测试代码

#include<iostream> using namespace std;constint N =1e6+10;int stk[N];int n;//进栈voidpush(int x){ stk[++n]= x;}//出栈voidpop(){ n--;}// 栈顶元素inttop(){return stk[n];}// 判空 bool empty(){return n ==0;}// 栈中元素个数 intsize(){return n;}intmain(){for(int i =1; i <=10; i++)push(i);while(!empty())// while(size()) { cout <<top()<<" ";pop();}return0;}

运行结果:

在这里插入图片描述

三、stack

3.1 如何创建

stack<T> st;//T 可以是任意类型的数据。

3.2容器相关接口

3.2.1 size / empty

(1)size :返回栈里实际元素的个数;
(2)empty :返回栈是否为空。
时间复杂度:O(1)

3.2.2 push/pop

(1) push :进栈;
(2) pop:出栈。
时间复杂度:O(1)

3.2.3 top

(1) top:返回栈顶元素,但是不会删除栈顶元素。
时间复杂度: O(1)

3.3测试所有接口

#include<iostream>#include<stack> using namespace std;intmain(){ stack<int> st;// 先讲1~10进栈for(int i =1; i <=10; i++){ st.push(i);}while(st.size())// !st.empty(){ cout << st.top()<< endl; st.pop();}return0;}

运行结果:

在这里插入图片描述

总结 — 每日励志时刻

本文介绍了栈(stack)这一数据结构的概念、模拟实现及C++ STL中的stack容器。文章首先阐述了栈作为"后进先出"(LIFO)线性表的特点,包括栈顶、栈底操作规则。随后详细讲解了使用数组模拟栈的实现方法,包括进栈(push)、出栈(pop)、获取栈顶元素(top)、判空(empty)等基本操作,并提供了完整的测试代码。最后介绍了C++ STL中的stack容器及其接口使用,通过示例代码展示了如何利用STL stack进行基本操作。全文强调栈在算法竞赛中的应用价值,并指出其操作的时

在这里插入图片描述

Read more

一篇最全Python 爬虫超详细讲解(零基础入门,适合小白)

一篇最全Python 爬虫超详细讲解(零基础入门,适合小白)

爬虫是指通过编程自动从网页上获取信息的技术.想象你平时打开网页,右键点击 “查看源代码”,那些你看到的HTML代码就是网页的结构,而爬虫就像一位帮你阅读这些网页内容的“机器人”. 本文将详细讲解如何从零开始编写一个Python爬虫,即使是完全没接触过编程的朋友也能理解. 这里插播一条粉丝福利,如果你正在学习Python或者有计划学习Python,想要突破自我,对未来十分迷茫的,可以点击这里获取最新的Python学习资料和学习路线规划(免费分享,记得关注)   一、爬虫的基本流程 1. 发送请求:爬虫向目标网页发送请求,获取网页内容. 2. 解析网页:从返回的网页内容中提取你需要的信息. 3. 保存数据:将提取到的信息保存到文件或数据库中,以便后续分析. 二、常用爬虫库 在Python中,有两个非常流行的库用于爬虫开发: * requests:用于发送网络请求,获取网页内容. * BeautifulSoup:用于解析网页内容,提取需要的数据. 1. 安装库 首先,你需要安装这两个库.在命令行中执行以下命令: pip install requests beau

By Ne0inhk
2026年10大网络爬虫工具对比评测:从开源到企业级,选型指南全解析

2026年10大网络爬虫工具对比评测:从开源到企业级,选型指南全解析

2026年10大网络爬虫工具对比评测:从开源到企业级,选型指南全解析 导语 在数据驱动决策的商业环境中,网络爬虫作为数据采集的核心工具,其选型直接影响数据获取的效率、质量与成本。当前市场上的爬虫工具涵盖开源框架、轻量级组合、浏览器自动化工具、云端SaaS平台及企业级API服务等多种类型,技术特性与适用场景差异显著。本文选取10款2026年主流网络爬虫工具,从部署难度、技术灵活性、反爬能力、数据质量、成本模型等八大核心维度进行深度对比,为技术团队提供中立、详实的选型参考,助力快速匹配符合自身业务需求的爬虫解决方案。 一、评测范围与对比维度说明 1.1 评测对象选取标准 本次选取的10款工具均满足“市场活跃度高、用户基数大、技术成熟度高”三大核心条件,涵盖五种主流技术形态:企业级API服务(Bright Data Web Scraper API、ScrapingBee)、开源Python框架(Scrapy)、轻量级开发组合(Beautiful Soup + Requests)、浏览器自动化工具(Selenium、Playwright、Puppeteer)

By Ne0inhk
Gateway - 内置 Filter 使用指南:AddRequestHeader、RewritePath 等实战

Gateway - 内置 Filter 使用指南:AddRequestHeader、RewritePath 等实战

👋 大家好,欢迎来到我的技术博客! 💻 作为一名热爱 Java 与软件开发的程序员,我始终相信:清晰的逻辑 + 持续的积累 = 稳健的成长。 📚 在这里,我会分享学习笔记、实战经验与技术思考,力求用简单的方式讲清楚复杂的问题。 🎯 本文将围绕Gateway这个话题展开,希望能为你带来一些启发或实用的参考。 🌱 无论你是刚入门的新手,还是正在进阶的开发者,希望你都能有所收获! 文章目录 * Gateway - 内置 Filter 使用指南:AddRequestHeader、RewritePath 等实战 🚀 * 一、Spring Cloud Gateway 概述 📚 * 1.1 什么是 Spring Cloud Gateway? * 1.2 核心组件 * 1.3 Filter 类型 * 二、内置 Filter 详解 🔍 * 2.

By Ne0inhk
超越Tomcat的Spike (一):使用netty搭建Http服务器

超越Tomcat的Spike (一):使用netty搭建Http服务器

超越Tomcat的Spike (一):使用netty搭建Http服务器 * 🏆 引言 * 🚀 Netty的魅力所在 * 什么是Netty? * Netty vs 传统服务器 * 🏗️ Spike项目架构设计 * 项目结构 * 核心组件架构 * 💻 核心代码实现 * 服务器初始化与启动 * 请求处理逻辑 * ⚡ 性能测试与对比 * 并发处理能力测试 * 内存占用对比 * 📱 应用案例 * 案例一:高并发API网关 * 案例二:实时数据推送服务 * 🎯 核心优势分析 * 1. 非阻塞异步模型 * 2. 零拷贝技术 * 3. 可扩展性强 * 🔮 未来展望 * Spike 2.0 规划 * 应用场景扩展 * 📝 代码优化建议 * 1. 事件循环组优化 * 2. 内存管理优化 * 🏁 总结 🏆 引言 在现代Web应用开发中,HTTP服务器是构建任何网络服务的基础。传统的Tomcat、Jetty等服务器虽然功能强大,但在高性能场景下往往显得力不从

By Ne0inhk