括号匹配(栈) #数据结构与算法(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类型的指针,并返回栈顶素的值!!!】
【卒!!!】
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/54522.html