コード例 #1
0
int calculation(struct stack_t *stack,char exp_string[EXPRESSION_SIZE])
{
    int counter, value, result, first_value, second_value;
    for(counter = 0; exp_string[counter] != '\0'; counter++)
    {
        if(exp_string[counter] >= '0' && exp_string[counter] <= '9') //checks if the string element is a value
        {
            value = exp_string[counter] - '0';
            stack_push_back(stack,value);
        }
        else if(exp_string[counter] == '*' || exp_string[counter] == '/' || exp_string[counter] == '+' || exp_string[counter] == '-')
        {
            if(stack_get_size(stack) < 2)
            {
                return INT_MIN;
            }
            else
            {
                second_value = stack_pop_back(stack);
                first_value = stack_pop_back(stack);
                switch(exp_string[counter])
                {
                    case '*' :
                        result = first_value * second_value;
                        break;
                        
                    case '/' :
                        result = first_value / second_value;
                        break;
                        
                    case '+' :
                        result = first_value + second_value;
                        break;
                        
                    case '-' :
                        result = first_value - second_value;
                        break;   
                }
                stack_push_back(stack,result);
            }
        }
    }
    if(stack_get_size(stack) == 1)
    {
        return result;
    }
    else
    {
        return INT_MAX;
    }
}
コード例 #2
0
void tarjan_dfs(int u)
{
    dfn[u] = low[u] = ++idx;
    in_stack[u] = 1;
    stack_push_back(u);

    struct Edge *e = orig_edge[u];
    while (e) {
        if (!dfn[e->v]) {
            tarjan_dfs(e->v);
            if (low[e->v] < low[u]) low[u] = low[e->v];
        }
        else if (in_stack[e->v])
            if (dfn[e->v] < low[u]) low[u] = dfn[e->v];
        e = e->next;
    }
    
    if (dfn[u] == low[u]) {
        scc_cnt++;
        int v;
        do {
            v = stack_back();
            stack_pop_back();
            in_stack[v] = 0;
            scc_id[v] = scc_cnt;
            scc_size[scc_cnt]++;
        } while (v != u) ;
    }
}
コード例 #3
0
ファイル: bsjson.c プロジェクト: modelica-3rdparty/ExternData
static void JsonParser_endElem(struct JsonParser *parser, const String name, int type )
{
    DEBUG_PRINT("Json_endElem %s type %d\n", name, type );
    assert( parser->m_nodeStack->num > 0 );
    if (parser->m_nodeStack->num > 0) {
        stack_pop_back(parser->m_nodeStack);
    }
}
コード例 #4
0
ファイル: bsjson.c プロジェクト: modelica-3rdparty/ExternData
static int JsonParser_internalEndObj(struct ParserInternal *pi, enum eElemType elemType)
{
    char *name;
    void *ptr = stack_pop_back(&(pi)->stack);

    if (elemType != JSON_ARR_E && elemType != JSON_OBJ_E) {
        pi->error = JSNON_ERR_NOTOBJ;
        return JSON_NOK;
    }
    if ((name = (char*)ARR_VAL(ptr))) {
        if (pi->endElem) {
            pi->endElem(pi->parser, name, (elemType == JSON_ARR_E) ? JSON_ARRAY : JSON_OBJ);
        }
        free(name);
    }

    JsonParser_internalReset(pi);
    return 0;
}
コード例 #5
0
int main ()
{
	struct stack_t s;
	char i,c,p,brackets[20];
	int output = 0;
	
	stack_init(&s);
	printf("Vuvedi niz :");
	scanf("%s",brackets);
	for (c = 0;brackets[c] != '\0';c++)
	{
		if (brackets[c] == '{' || brackets[c] == '[' || brackets[c] == '(')
		{
			stack_push_back(&s,brackets[c]);
		}
	}
			for (i = 0;brackets[i] != '\0';i++)
			{ 
					if (brackets[c] == '{' || brackets[c] == '[' || brackets[c] == '(')
					{
						stack_push_back(&s,brackets[c]);
					}
					//if (stack_size != 0)
					//{
						switch (brackets[i])
						{
							case '}':
								p = stack_pop_back(&s);
								if (p != '{')                   
								{
									//printf("%c-{\n",p);
									output = 1;
								}	
								break;
							case ']':
								p = stack_pop_back(&s);
								if (p != '[')
								{
									//printf("%c-[\n",p);
									output = 1;
								}
								break;
							case ')':
								p = stack_pop_back(&s);
								if (p!= '(')
								{
									//printf("%c-(\n",p);
									output = 1;	
								}
								break;
						}
				
					//}				
			}
	if (output == 0 )
	{
		printf("Valid");
	} 
		else {printf("Invalid\n");}
	stack_destroy(&s);
	return 0;
}