括号匹配(栈) #数据结构与算法(6)

今天来作一道题:

额!题目的大致意思我用翻译软件翻译了一下是这样的:

给定仅包含字符“(”“)”“[”“]”“{”“}”的字符串,请确定输入字符串是否有效。括号必须按正确的顺序闭合,“()”和“()[] {}”都有效,但“(]”和“([)]”无效!!!

我们先简化一下题目,我们先实现一个括号,‘()’如果它实现了有效,我们再实现三个括号同时出现的有效!!!

如上图所示,这代码并不难,我们也轻松实现了一个括号是否合法的问题!!!

其实我们也可以对上图代码做一下稍微的改动,我们让L_num直接作为判断的依据,如果输入左括号我们就让L_num加一,反之若输入右括号我们让L_num减一,只有当L_num为零时,才证明左括号个数等于右括号个数,那么这个括号才合法!!!下面是代码:

白急,这还没到重头戏,我们刚才只是构建了一个括号的代码,如果是三个括号,我们又要如何去构建呢?其实我们可以用到栈【当然你也可以用其它的】的结构来描述它【顺便我再对栈有一个详细的描述!!!】

开干:

【首先我们先定义了一个结构体Stack,包含了一个整型数组data, 栈的大小size和当前栈顶的位置top。】

【然后定义了若干个函数,其中init_stack函数用于初始化栈,接收一个整型参数表示栈的大小,并返回一个Stack类型的指针。它首先动态分配了一个Stack类型大小的内存空间和一个整型数组大小为n的内存空间,然后将它们初始化,并将栈顶位置top初值设为-1,最后返回该结构体的指针。】

【clear函数用于清空栈所占用的内存空间,它先判断传入的指针是否为空,若是则直接返回。否则先释放数组data所占用的空间,再释放整个结构体所占用的空间!!!】

【push函数用于压入元素到栈中,接收一个Stack类型的指针和一个整型参数表示要压入的元素。它先判断传入的指针是否为空或者栈已经满了,若是则返回0表示压入失败。否则将栈顶位置top加1,再将元素val存储到data[top]处,返回1表示压入成功。】

【empty函数用于判断栈是否为空,接收一个Stack类型的指针,并返回一个整型结果表示栈是否为空!!!】

​【pop函数用于弹出栈顶元素,接收一个Stack类型的指针,并返回一个整型结果表示是否弹出成功。它先判断传入的指针是否为空或者栈已经为空,若是则返回0表示弹出失败。否则将栈顶位置top减1,返回1表示弹出成功!!!】

【top函数用于获取栈顶元素,接收一个Stack类型的指针,并返回栈顶元素的值!!!】

【卒!!!】

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

》(。・ω・。)ノ♡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值