呆萌数据结构 | 03 堆栈

堆栈是一种常用的基础数据结构,类似箱子中书的堆叠方式,遵循后进先出(LIFO)原则。它包括栈顶、压栈(Push)和弹出(Pop)等概念。堆栈在撤销功能、深度优先搜索等场景中有广泛应用。本文介绍了堆栈的基本原理,并以C#语言为例,展示了如何使用链表实现堆栈。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文来自 萌一小栈

有一堆书,一本叠一本地放入箱子里,最后放入的,一定是在最上面,对不对。取书的时候,规定只能从上面一本一本地取,如果要拿最先放入箱子里的那本书,也就是最下面的那本书,只能先把上面的拿出来。

stack.png

什么是堆栈(Stack)

上面说的就是我们今天要讲的堆栈,也可以简单叫做栈。堆栈是很常用很基础的数据结构。堆栈涉及到的概念如果下。

栈顶,就是最上面的一个元素。

压栈(Push),就是将一个元素放入栈中。

弹出(Pop),就是将栈顶的元素从堆栈中拿出来。

就像上面往箱子里放书一样,最先放入堆栈的元素,在最下面,最后放入的元素,在最上面,而取元素,只能从上面一个一个取,不能从中间抽取元素。

堆栈有什么用呢

那栈有什么用呢,举几个简单的例子。我们用的很多软件,都有撤销功能对不对,其实,那个就可以用堆栈来实现。将每一步操作时的状态,保存到堆栈中,当用户要撤销时,就从堆栈中拿出最近的一个状态进行恢复,也就是最后放入堆栈中 (栈顶) 的状态数据。是不是很熟悉?

后面要学到的树的遍历,深度优先搜索,也是用堆栈来实现的。

总之呢,记住一句话,先进后出(Fist in last out) 或者 后进先出(Last in first out) 就可以完美诠释堆栈这种数据结构。

自己动手实现一下

很多编程语言已经实现了堆栈(Stack)结构,但是呢,我们这里自己实现一下,加深理解。代码使用 C#,以链表的形式来实现。(C# 语言本身已经拥有了Stack,在实际使用中,不需要自己实现)

 class Node {
     public int data;
     public Node next;

     public Node(int data){
         this.data = data;
     }
 }

 class Stack {
     public Node topNode = null;

     // 将一个数据压入堆栈中
     public void Push(int data){
         Node newNode = new Node(data);
         newNode.next = topNode;
         topNode = newNode;
     }
     
     // 将一个栈顶数据从堆栈中弹出
     public int Pop() {
         if (!IsEmpty()){
             Node top = topNode;
             topNode = topNode.next;
             return top.data;
         }
         return -1;
     }
     
     // 窥探栈顶元素,但不弹出
     public int Peek() {
         if(!IsEmpty()){
             return topNode.data;
         }
         return -1;
     }

     // 判断堆栈是否为空
     public bool IsEmpty() {
         return topNode == null;
     }

 }

好啦,今天的文章到此结束,是不是很简单? 有问题记得在下面留言噢。嘻嘻(*^__^*) 晚安~



为了方便小伙伴们在手机上阅读,我创建了一个公众号「 萌一小栈 」可以扫码关注噢~

基于C2000 DSP的电力电子、电机驱动和数字滤波器的仿真模型构建及其C代码实现方法。首先,在MATLAB/Simulink环境中创建电力电子系统的仿真模型,如三相逆变器,重点讨论了PWM生成模块中死区时间的设置及其对输出波形的影响。接着,深入探讨了C2000 DSP内部各关键模块(如ADC、DAC、PWM定时器)的具体配置步骤,特别是EPWM模块采用上下计数模式以确保对称波形的生成。此外,还讲解了数字滤波器的设计流程,从MATLAB中的参数设定到最终转换为适用于嵌入式系统的高效C代码。文中强调了硬件在环(HIL)和支持快速原型设计(RCP)的重要性,并分享了一些实际项目中常见的陷阱及解决方案,如PCB布局不当导致的ADC采样异常等问题。最后,针对中断服务程序(ISR)提出了优化建议,避免因ISR执行时间过长而引起的系统不稳定现象。 适合人群:从事电力电子、电机控制系统开发的技术人员,尤其是那些希望深入了解C2000 DSP应用细节的研发工程师。 使用场景及目标:①掌握利用MATLAB/Simulink进行电力电子设备仿真的技巧;②学会正确配置C2000 DSP的各项外设资源;③能够独立完成从理论设计到实际产品落地全过程中的各个环节,包括但不限于数字滤波器设计、PWM信号生成、ADC采样同步等。 其他说明:文中提供了大量实用的代码片段和技术提示,帮助读者更好地理解和实践相关知识点。同时,也提到了一些常见错误案例,有助于开发者规避潜在风险。
RA4M2开发IOT(10)----集成LPS22DF气压计 CSDN文字教程:https://coremaker.blog.csdn.net/article/details/148830559 B站教学视频:https://www.bilibili.com/video/BV1DjNmzyEuV 概述 本篇文章将延续现有 “动态显示 MEMS 数据” 的框架,在同一条 I²C 总线上新增 LPS22DF 数字气压计。 项目将具备 惯性 + 气压 的完整环境感知能力,并且借助涂鸦平台可快速把本地大气数据同步到云端,为室内气候监测、爬山/无人机高度预警等场景奠定基础。 硬件准备 首先需要准备一个开发板,这里我准备的是自己绘制的开发板,需要的可以进行申请。 主控为R7FA4M2AD3CFL#AA0 产品特性 LPS22DF是一款超紧凑型压阻绝对压力传感器,可用作数字输出气压计。LPS22DF相比前代产品具有更低的功耗和更小的压力噪声。 该器件包含传感元件和IC接口,该接口通过I²C、MIPI I3CSM或SPI接口实现传感元件与应用的通信,同时该器件也支持用于数据接口的广泛Vdd IO。检测绝对压力的传感元件由悬浮膜组成,采用ST开发的专门工艺进行制造。 LPS22DF采用全压塑孔LGA封装(HLGA)。可保证在-40 °C到+85 °C的温度范围都能工作。封装上有开孔,以便外部压力到达传感元件。 260-1260 hPa 的绝对压力范围,适用于多种气压应用。 最低电流消耗可达 1.7 μA,适合低功耗设备。 压力精度达 0.2 hPa,并具备 0.34 Pa 的低噪声和 0.45 Pa/°C 的温度补偿偏移。 通信模式 对于LPS22DF,可以使用IIC进行通讯。 最小系统图如下所示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值