Ir para conteúdo
Fórum Script Brasil

Carol Alves

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Posts postados por Carol Alves

  1. Olá pessoal, tudo bem?

    Preciso de uma ajuda para descobrir o erro, se puderem também aceito material de estudo, o que acontece é que eu já rodei esse código de cima a baixo e ele continua dando problema na função:

    Buscar: mesmo quando não existe o valor ele retorna uma posição;

    Excluir: ele não exclui o valor quando ele está na primeira posição;

    Excluir tudo: após usar quando peço para imprimir o programa dá erro

     

    #include<stdio.h>
    #include<stdlib.h>

    //criação da lista - recebe um inteiro e tem um ponteiro
    //*ini é o ponteiro inicial (um ponteiro que aponta para outro ponteiro)

    struct No{
        int dado;
        struct No *prox;
    } *ini=NULL;

    void inserir_ini(int num){
        struct No *novo; // nova estrutura com características de No
        novo = malloc(sizeof(No())); //pegar um espaço de memoria
        novo->dado=num; //informação de novo agora é num
        novo->prox=ini; //ponteiro de novo aponta para ini (primeiro da lista) último da lista
        ini=novo; // ponteiro de ini aponta para novo
        }

    void inserir_fim(int num){
        struct No *aux =ini, *novo; // novo ponteiro e nova estrutura com características de No
        novo = malloc(sizeof(No())); //pegar um espaço de memoria
        novo->dado=num; //informação de novo agora é num
        novo->prox=NULL; //ponteiro de novo aponta para NULL

        if(aux==NULL){
            ini=novo; //se não tinha nada na lista, ini apontava para null, logo aux aponta para null, nesse caso ini vai apontar para o primeiro da lista
        }
        else{
            while(aux->prox !=NULL){
                aux=aux->prox;
            }
            aux->prox=novo; //procura o último da lista e conecta o novo nele
        }
    }


    void imprimir(){

        struct No*novo; //criou um ponteiro igual ao no

         if (ini == NULL)
      {
        printf("--- fim da lista ---\n\n");
        return;
      }

      novo = ini;
      while (novo !=NULL) {
         printf("Info = %d\n",novo->dado);
         novo = novo->prox;
      }
      printf("--- fim da lista ---\n\n");
    }

    void buscar (int busca, struct No*ini){

        int contador=1;
        struct No *q;
        q = ini;


        while (q != NULL && q->dado != busca) {
            q = q->prox;
            contador=contador+1;
        }

        printf("O valor inserido está na posição %d",contador);

    }

    void alterar(int alvo, int alvo2, struct No*ini){

        struct No *q;
        q = ini;

        while (q != NULL && q->dado != alvo) {
            q = q->prox;
        }
        if (q != NULL) {
            q->dado=alvo2;
        }
    }

    void excluir(int alvo, struct No*ini){

        struct No *p,*q;
        p=ini;
        q=ini->prox;

        if (q->dado==alvo)

        while (q != NULL && q->dado != alvo) {
            p = q;
            q = q->prox;
        }

        if (q != NULL) {
            p->prox = q->prox;
            free (q);
        }
    }

    void excluirtudo(struct No*ini){

        struct No *aux;

        while (ini!= NULL) {
            aux = ini;
            ini=aux->prox;
            free(aux);
        }

        ini->prox=NULL;
    }


    int main(){
        int op=1, num, num2,busca;

        while (op!=0){

        printf("\n\nMenu \n1-Insere no inicio; \n2-Insere no fim; \n3-Imprime; \n4-Buscar \n5-Alterar \n6-Excluir um \n7-Excluir tudo \n0-Finaliza \n\n Digite a opcao: ");
        scanf("%d", &op);

            switch(op){
            case 1:
                printf("\nInsira um numero: ");
                scanf("%d",&num);
                inserir_ini(num);
                break;

            case 2:
                printf("\nInsira um numero: ");
                scanf("%d",&num);
                inserir_fim(num);
                break;

            case 3:
                imprimir();
                break;

            case 4:
                printf("Insira o numero que deseja buscar:");
                scanf("%d",&busca);
                buscar(busca,ini);
                break;

            case 5:
                printf("\nInsira o numero que deseja substituir: ");
                scanf("%d",&num);

                printf("\nInsira o novo numero: ");
                scanf("%d",&num2);

                alterar(num,num2, ini);
                break;

            case 6:
                printf("\nInsira o numero que deseja excluir: ");
                scanf("%d",&num);
                excluir(num, ini);
                break;

            case 7:
                excluirtudo(ini);
                printf("\nLista deletada.");
                break;

            }
        }
    }
     

×
×
  • Criar Novo...