写程序展开它
(a1|a2)*(b1|b2)->a1*b1|a1*b2|a2*b1|a2*b2*的优先级别高于|a1*(b1|b2)|(x|y|z)*(a|b|c)|p
展开为:a1*b1|a1*b2|x*a|x*b|x*c|y*a|y*b|y*c|z*a|z*b|z*c|p这个算法如何展开,还望帮忙

解决方案 »

  1.   

    我自己想的 但不知行不行首先把它分成几部分,如a1*(b1|b2)|(x|y|z)*(a|b|c)|p
    分成a1*(b1|b2)   (x|y|z)*(a|b|c)  p 三部分
    这些部分符合(x|y|........)*(x|y|........)之后就可以定义函数
    c(链表 a,链表 b)  其中a=x,y......; b=x,y.......
    利用c(链表 a,链表 b)这个函数函数 可把上面例子分成
    a1 b1;a1 b2;x a;x b;x c;y a;y b;y c;z a;z b;z;c p;
    加上符号就可以了 这是大体思路 把a1*(b1|b2)|(x|y|z)*(a|b|c)|p分解成3部分的思路是:
    遇到*号不分解加入链表
    遇到'('则全部加入直到')'
    遇到|则新建链表c(链表 a,链表 b)这个函很容易实现;自己想的,不怎么好,我想会有更加好的算法