注册 登录
编程论坛 数据结构与算法

关于严蔚敏书中的由原表达式建树算法的一些问题

陈陆林520 发布于 2012-12-05 21:23, 435 次点击
void CrtExptree(BiTree &T,char exp[]) {
    InitStack(S); Push(S,"#"); InitStack(PTR);
    p=exp; ch=*p;
    while(!(GetTop(S)=='#'&&ch=='#')) {
        if(!IN(ch,OP)) CrtNode(t,ch); // 建立叶子结点并入栈
        else {
            switch(ch) {
            case '(': Push(S,ch); break;
            case ')':
            {
                Pop(S, c);
                while (c!='(' ) {
                    CrtSubtree(t,c); Pop(S,c);
                }
                break;
            }
            default:
            {
                while(!Gettop(S,c)&&(precede(c,ch))) {
                    CrtSubtree(t,c); Pop(S,c);
                }
                if ( ch!='#') Push(S,ch);
                break;
            }
            }
        }
        if(ch!='#') { p++; ch=*p;}
    }
    Pop(PTR,T);
}

建立叶子结点的算法
void CrtNode(BiTree &T,char ch) {
    T=(BiTNode *)malloc(sizeof(BiTNode));
    T->data=ch;
    T->lchild=T->T-rchild=NULL;
    Push(PTR,T);
}

建立子树的算法
void CrtSubtree(BiTree &T,char ch) {
    T=(BiTNode *)malloc(sizeof(BiTNode));
    T->data=ch;
    Pop(PTR,rc); T->rchild=rc;
    Pop(PTR,lc); T->lchild=lc;
    Push(PTR,T);

}这是严蔚敏的书上 给的一个算法   
请问给位大神,  while(!Gettop(S,c)&&(precede(c,ch)这句中  !Gettop(S,c)怎么理解,小弟问过很多人 ,他们都没搞清楚,望哪位大神解决一下
0 回复
1