使用sql模拟循环链表与堆栈进行括号匹配

/***************************************************

          作者:herowang(让你望见影子的墙)

    日期:2009.7.4

          注:    转载请保留此信息

    更多内容,请访问我的博客:blog.csdn.net/herowang

****************************************************/

    问题:设计一个算法,判断一个算术表达式中的括号是否配对。算术表达式保存在带头结点的单循环链表中,每个结点有两个域:chlink,其中ch域为字符类型。

    如果单纯从用程序的角度来说,难度应该不大。我的看法:当遇到(号,那么计数器加1,当遇到右括号的时候,计数器减1.
结果及判断条件:
    1、匹配:计数器为0,字符串读取结束
    2、(不匹配:有多余的(导致不匹配,计数器不为0
    3、)不匹配,有多余的)导致不匹配,计数器为0,但是字符串中遇到)。

另外还有其他方法:

    参见:http://topic.csdn.net/u/20090620/17/bffdc5aa-d3dc-4001-bd98-6ad1ececc5bd.html 10楼。

   但是在这里要求使用链表和堆栈。

1、思路:根据括号的特点( ( ) ),进行匹配的时候,第一个做括号最后一个匹配,最后一个左括号与第一个右括号相匹配,恰好可以使用栈来进行存储。

2、方法:先把表达式放在链表中,然后读取链表,当遇见左括号时,把“(”入栈,遇见

  “)”时进行出栈,直到栈空或者链表结束。

3、在进行检测括号是否匹配的时候,需要考虑到各种情况:

     1)、匹配。 例如:(())

     2)、左括号不匹配。例如: (()

     3)、右括号不匹配。例如: ())

4、判断上述几种情况的方式:

    1)左括号不匹配:当链表读取结束的时候,检测栈为不为空。

    2)右括号不匹配:当栈为空,而链表中还存在“)”。

    3)括号匹配:当栈为空,并且读取链表结束。

  用C语言实现起来比较简单,参见:我的另一个博客:

   http://blog.csdn.net/HEROWANG/archive/2009/06/20/4285326.aspx

在这里使用SQL来模拟循环链表和堆栈。

    
   

 

    使用链表的思路其实就是一个简单的BOM。
    另,在使用堆栈进行判断的时候,使用游标来读取表中的内容更简单一点,但是在这里为了更好的体现链表的特点,所以使用的是next来获取下一个字符。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值