double RPNStackCalc(stack stk) { int i; node item; stack calc; memset(&calc,0,sizeof(calc)); calc.size=0; for(i=0;i<stk.size;i++) { item=stk.item[i]; if(item.is_num) { push(&calc,item); }else{ node a,b; nodecpy(&b,pop(&calc)); nodecpy(&a,pop(&calc)); item.data.num=calc2(a.data.num,b.data.num,item.data.op); item.is_num=true; push(&calc,item); } } if(calc.size!=1||isEmpty(calc)) return -1; else return (calc.item[0].data.num); }
fstree_node_t treecpy ( fstree_node_t old_node ) { fslist_node_t aux_node; fstree_node_t new_node; if (!old_node->children->size) return nodecpy(old_node); new_node = nodecpy(old_node); aux_node = old_node->children->first; while (aux_node != NULL) { add_child(new_node, treecpy(aux_node->child)); aux_node = aux_node->next; } return new_node; }