void * get_data_index(lista_enc_t *list, int index)
{
    int i = 0;
    no_t * no;

    if (list == NULL) {
        fprintf(stderr, "get_data_index: Invalid pointer!");
        exit(EXIT_FAILURE);
    }

    if (index == 0)
        return obtem_dado(list->cabeca);

    if (index == list->tamanho -1)
        return obtem_dado(list->cauda);

    no = list->cabeca;

    while (no && i <= index){
        no = obtem_proximo(no);
        i++;
    }

    return obtem_dado(obtem_anterior(no));
}
void imprimi_lista_tras (lista_enc_t *lista)
{
    no_t *no = NULL;

    if (lista == NULL){
        fprintf(stderr,"imprimi_lista: ponteiros invalidos");
        exit(EXIT_FAILURE);
    }

    no = lista->cauda;

    while (no){
        printf("Dados: %p\n", obtem_dado(no));

        no = obtem_anterior(no);
    }
}
void ordena_tarefas(lista_enc_t* lista_tarefas)
{
    tarefa_t* p_tarefa;
    tarefa_t* p_tarefa_next;
    no_t* p_no;
    int tamanho, i;

    for(tamanho = tamanho_lista(lista_tarefas); tamanho>1; tamanho--){
        p_no = obter_cabeca(lista_tarefas);
        for(i=0; i<(tamanho-1); i++){
            p_tarefa = (tarefa_t*) obter_dado(p_no);
            p_no = obtem_proximo(p_no);
            p_tarefa_next = (tarefa_t*) obter_dado(p_no);
            if(tarefa_get_periodo(p_tarefa) > tarefa_get_periodo(p_tarefa_next)){
                swap_nos(lista_tarefas, obtem_anterior(p_no));
            }
        }
    }
}