今天来作一道题:
额!题目的大致意思我用翻译软件翻译了一下是这样的:
给定仅包含字符“(”“)”“[”“]”“{”“}”的字符串,请确定输入字符串是否有效。括号必须按正确的顺序闭合,“()”和“()[] {}”都有效,但“(]”和“([)]”无效!!!
我们先简化一下题目,我们先实现一个括号,‘()’如果它实现了有效,我们再实现三个括号同时出现的有效!!!
如上图所示,这代码并不难,我们也轻松实现了一个括号是否合法的问题!!!
其实我们也可以对上图代码做一下稍微的改动,我们让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类型的指针,并返回栈顶元素的值!!!】
【卒!!!】