栈的学习

栈的一些应用

前言

首先我们要来学习一下栈,这是一种简单的数据储存结构

我们来简单的看下示意图:

 其实他就是一种简单的线性表,有进栈(push),出栈(pop)这个两种主要操作。进栈就是将一个新的元素放到栈顶,出栈就是从栈顶取出一个元素。栈顶的元素总是最后入栈,需要出栈时候,又最先被从栈中取出。所以,堆栈总是遵循一个规则,先进后出。 这里用王爽老师的在他的书《汇编语言》里面举的例子。

 现在有三本书,我们将其放到这个盒子里面,放完以后。变成这样

最先将c语言放进盒子,在将数据结构放进盒子,最后将数学放到盒子里面。然后,我们在将书从盒子里面拿出来,一次只取一本,拿出数的顺序数十名样的呢?
 应该是数学-->数据结构-->c语言。

1.栈计算表达式

 利用栈,我们可以用来计算表达式,以及验证表达式是否正确。比如1+2,2+4等。那是如何实现的呢?
 首先,我们准备两个堆栈,一个栈A,一个栈B。一个用来存符号,一个用来存数字。这里我们用1+2来演示一下。首先,我们对表达式进行处理,将1+2变成#1+2#,我们再拆解表达式,将1+2变成'1','+','2'。我们遇到了字符串'1',将字符串1变成数字1,存入栈A,再然后遇到'+',用'+'和'#'进行优先级对比,比#高就进入栈B。

然后又遇到1,取出堆栈B里面的+和堆栈A里面的1,组成1+1进行计算,将结果又压到堆栈A里面。后面#进入堆栈B,优先级和栈底的#一样,就抵消掉了。此时堆栈B就空了。 堆栈A也就一个结果2了。此时2就是最终结果

2.栈计算表达式联系wasm

 大家如果有调试过wasm就会想到wasm的运行机制和这个很像,wasm是一种栈式虚拟机。学习了堆栈,对wasm也会有更深的认识。wasm也是从内存中取出操作数。加上符号进行运行得到结果。我们调试wasm的时候,malloc得到的都是一串数字。这一串数字就是地址。就是c语言里面的mlloc差不多,申请地址,返回首地址,其实也就是和指针差不多。

这里写了一个两个数相加的wasm。接收两个参数,相加,然后返回。


 今天就到这里,如果您觉得不错,欢迎关注微信公众号。如有错误,欢迎私聊指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
linux协议学习涉及到网络协议的实现和内核源码的理解。在linux内核中,网络协议是由一系列网络协议层组成的,包括物理层、数据链路层、网络层、传输层和应用层。每个层次都有相应的协议和功能。 在内核网络子系统初始化时,L4层协议(如TCP和UDP)会被注册,通过注册的协议,内核可以分发接收到的网络数据包。例如,TCP协议的注册包括对应的处理函数tcp_v4_rcv,UDP协议的注册包括对应的处理函数udp_rcv。这些处理函数负责解析和处理接收到的数据包。 在linux协议学习中,了解如何添加自定义协议也是非常重要的。以INET协议簇为例,可以使用函数inet_add_protocol来注册自定义的网络协议。该函数需要传入一个指向net_protocol结构的指针和协议号。 为了深入学习linux协议,你可以通过以下几个途径进行: 1. 阅读内核源码:深入研究内核源码是学习linux协议的最佳途径。可以从网络协议的初始化、协议处理函数等方面入手,逐步理解各个层次的实现。 2. 参考相关书籍和教程:有很多书籍和在线教程专门介绍linux协议的实现和原理。这些资料可以帮助你更好地理解协议的工作原理和实现细节。 3. 参与开源项目:参与开源项目可以提供实践的机会,可以通过参与网络协议开发来加深对linux协议的理解。 4. 加入开发交流群:加入开发交流群可以与其他开发者讨论和交流,获取更多的学习资源和经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值