예제 #1
0
파일: RPNCalc.c 프로젝트: 0x0E01/oss_test1
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);
}
예제 #2
0
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;
}