C语言中的逻辑门仿真

时间:2018-12-18 17:40:39

标签: c recursion

 struct gate
    {
        char name[10]; 
        int type; //Type of the gate : INPUT,AND, OR, NOT, FLIPFLOP
        int value;
        char inputname1[10];
        char inputname2[10];
        struct gate *input1;
        struct gate *input2;
    };

我已经创建了一个具有结构结构的树,但是我找不到如何递归计算它的方法,您能帮忙吗?

schema

int pre(struct gate *root)        //address of root node is pass
{
    if(root->input1->type==INPUT || root->input2->type==INPUT){
        if(root->type == OR){
            root->type = INPUT;
            return root->value = gateor(root->input1->value,root->input2->value);
        }
        if(root->type == AND){
            root->type = INPUT;
            return root->value = gateand(root->input1->value,root->input2->value);
        }
        if(root->type==NOT){
            root->type=INPUT;
            return root->value = gatenot(root->input1->value);
        }
        if(root->type == FLIPFLOP){
            root->type = INPUT;
            return root->value = gateflipflop(root->input1->value,0);
        }
    }

    pre(root->input1);
    pre(root->input2);

}

我不认为递归,我希望它能起作用。

a,b,c,d是一个结构,但仅具有value,type和name。
值是1和0
门值= -1;
我不知道这些值是否必要。

1 个答案:

答案 0 :(得分:3)

您可以像这样递归地解决它:

int pre (struct gate *root) {
    if (root->type == INPUT)
        return root->value; // This is the recursion end
    else if (root->type == OR) {
        return gateor(pre(root->input1), pre(root->input2)); // Recurse here
    } else if (root->type == AND) {
        return gateand(pre(root->input1), pre(root->input2));
    } // Same for the other operations
}

这应该给您一个解决问题的思路。