原题:设计一个算法,判断一个算术表达式中的括号是否配对。算术表达式保存在带头结点的单循环链表中,每个结点有两个域:ch和link,其中ch域为字符类型。
    其实是考察数据结构的题目,自己用C语言写出来了,现在请牛人们用T-SQL写出来。
    C语言的算法与程序,在下面的地址里面:
    http://blog.csdn.net/HEROWANG/archive/2009/06/20/4285326.aspx
    

解决方案 »

  1.   

    http://topic.csdn.net/u/20090421/14/81b2b167-b10e-497c-8e1e-9422eb3b0aa5.html29楼.
      

  2.   

    中间没有数字要不要控制?declare @str varchar(8000)
    set @str='(()1+)+()(+)'declare @ismatch int
    set @ismatch=1
    if (len(replace(@str,'(',''))<>len(replace(@str,')',''))) --左右括号个数不相等
    set @ismatch=0
    else
    begin
    declare @i int,@lefts int,@rights int
    select @i=1,@lefts=0,@rights=0
    while @i<=len(@str)
    begin
    if(substring(@str,@i,1)='(')
    set @lefts=@lefts+1
    else if(substring(@str,@i,1)=')')
    set @rights=@rights+1 if @rights>@lefts --右括号不能大于左括号的个数
    begin
    set @ismatch=0
    break
    end
    set @i=@i+1
    end
    endif @ismatch=0
    print N'不匹配'
    else
    print N'匹配'
      

  3.   

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

  4.   

    还是一个CharIndex的使用问题。直接联机帮助,看看charIndex的用法,然后写出来就很简单了。
      

  5.   

    事情沒有這麼簡單,若是用於檢查一段SQL是不行,在日常的應用中由畫面欄位傳入的SQL語句是會帶--註釋符和'字符界定符的,樓上的方式只能用於非常理想狀態下的SQL語句的檢查。比如Select '(',isnull(x1,'') --(為字符內容
    From tabel1