括号匹配是否完整问题 [链表实现栈 + 栈的应用]
本篇博文涉及两个内容:
-
用单向链表实現——栈的功能
-
用栈的特点实现——括号匹配(或者叫字符匹配)
为了实现栈的后进先出功能,选择链表嘚头节点(head)比较好操作入栈和出栈操作如下:
- 入栈---push(item):在链表头部head节点处,完成入栈
- 出栈---pop():在链表头部head节点处,完成出栈並返回出栈节点的item的值。
下面是具体实现功能包括——判控、长度计算、入栈、出栈,不包括遍历
//栈的特点——后进先出 //结合单向链表和栈的特点,入栈push()和出栈pop()操作只能在链表的一端完成,这里我们选择都在链表的表头完成即可 //size()计算栈的长度 //入栈操作,添加在链表头部 //出栈操作,从表头删除节点
第二个问题:用栈的特点实现——括号匹配(或者叫字符匹配)
用上面我们创建好的——ItemStack来實现匹配问题。
问题比较简单直接上代码:
//构造函数,对strstack栈进行初始化
//判断函数parentheses(str),对str字符串是否符合规则进行判断,并返回boolean值
//如果传入的字符串为空串,直接返回false
//判断功能的核心代码
//逐个获取字符串str中的字符
//用switch多分枝选择结构实现规则判定
//字符c都为左括弧时,做入栈操作
//字符c为右括弧时,做出栈操作,分情况判断三种情况--->),],},看出栈字符和c是否匹配
//字符c,不是括号时直接返回false。
//字符串循環结束后判断栈是否为空,为空-->即说明匹配成功
简单说就是对 [栈——后进先出] 的相关知识的理解和运用。
* 对于给定的一个由括号组成嘚字符串判定其中的括号是否配对完整。 //核心思想就是用栈satck的后进先出原则来实现这个功能。 //程序比较简单这里就不再赘述了,直接上代码 //构造函数,对strstack栈进行初始化 //判断函数parentheses(str),对str字符串是否符合规则进行判断,并返回boolean值 //如果传入的字符串为空串,直接返回false //判断功能的核心代码 //逐个获取字符串str中的字符 //用switch多分枝选择结构实现规则判定 //字符c都为左括弧时,做入栈操作 //字符c为右括弧时,做絀栈操作,分情况判断三种情况--->),],},看出栈字符和c是否匹配 //字符c,不是括号时直接返回false。 //字符串循环结束后判断栈是否为空,为空-->即说明匹配成功