Ir para conteúdo
Fórum Script Brasil

Manoel Kikachi Mendez

Membros
  • Total de itens

    2
  • Registro em

  • Última visita

Posts postados por Manoel Kikachi Mendez

  1. Bom dia, pessoal.
    Espero que eu esteja publicando de forma certa, porque sou novo no fórum e novo na programação.
    Então, sobre uma dúvida que estou, mais especificamente em "Listas Encadeadas Simples", é que a função abaixo deve eliminar a primeira metade da lista encadeada.
    Eu teria que percorrer toda lista para eliminar a metade da lista, caso seja par.

    Será que estou fazendo de forma certa?

    Se puderem me ajudar com o código abaixo, será muito bem-vindo!!

    Função abaixo:

    // (c) Remove a primeira metade da Lista. Caso a lista possua um número ímpar de elementos,
    // considere que a primeira metade possui mais elementos
    // (Ex: se a lista possuir 5 elementos, a primeira metade possui os 3 primeiros elementos).
    // Se a lista tiver vazia, nada acontece.
    void removePrimeiraMetade(Lista *L) {
        // IMPLEMENTE ESTA FUNÇÃO
        //Estou pensando no código
    	if (listaEstavazia(L)){
          return;
        }
      	else{
          No *p = L->inicio;
          No *anterior = NULL;
          while (p != NULL){
            if (L->tamanho % 2 == 0){
              anterior->prox = no->prox;
              L->tamanho--;
            }
            else {
              anterior->prox = no->prox;
              L->tamanho--;
            }
          }
        }
    }

    Struct _no, _produto e _lista (não tá na ordem, mas está aqui):
     

    typedef struct _produto {
        int num_serie; // numero de série do produto
        char nome[64];
        double preço;
    } Produto;
    
    // struct que define um nó curcular duplamente encadeado
    typedef struct _no {
        Produto *prod;
        struct _no *prox;
    } No;
    
    // struct que define uma Lista Ligada Simples
    typedef struct _lista {
        No *inicio;
        No *fim;
        int tamanho; // numero de nós da lista
    } Lista;

     

  2. Boa noite, pessoal.

    Estou com um exercício da faculdade sobre Listas Encadeadas Simples, e queria fazer com que a ordem dos nós fique inversa a que inseri nos nós.

    Como posso fazer isso?

     

    É basicamente nessa maneira:

    **ANTES**

    L -> 
    (800, 99.99, Polystation 5) -> 
    (981, 199.99, XCaixa Series Y) -> 
    (345, 299.99, mouse gamer) ->
    (123, 699.99, teclado) ->
    NULL

    **DEPOIS**

    L -> 
    (123, 699.99, teclado) ->
    (345, 299.99, mouse gamer) ->
    (981, 199.99, XCaixa Series Y) -> 
    (800, 99.99, Polystation 5) -> 
    NULL

     

    A) Função que inverte o nó da lista

       

    // (d) Retorna a Lista invertida. Se a lista está vazia, retorne uma lista vazia.
        Lista *inverter(const Lista *L) {
            // IMPLEMENTE ESTA FUNÇÃO
            Lista* q;   /* variável auxiliar para nova lista */
            No *p;
            int aux;
        
            for (p = L; p != NULL; p = p->prox)
        
                if (p-> == NULL)
                {
                    aux = p->prox;
                    p->prox = NULL;
                    return p;
                }
        }

    B) Structs de `_produto`, `_no` e `_lista`

       

    // struct que define um produto
        typedef struct _produto {
            int num_serie; // numero de série do produto
            char nome[64];
            double preço;
        } Produto;


        
       

     // struct que define um nó curcular duplamente encadeado
        typedef struct _no {
            Produto *prod;
            struct _no *prox;
        } No;


        
       

     // struct que define uma Lista Ligada Simples
        typedef struct _lista {
            No *inicio;
            No *fim;
            int tamanho; // numero de nós da lista
        } Lista;


    C) Código acionado na `main()`:

            

     else if (strcmp(comando, "inverte") == 0) {
               Lista *L_aux = inverter(L);
               destroiLista(&L);
               L = L_aux;
             }
×
×
  • Criar Novo...