Ir para conteúdo
Fórum Script Brasil
  • 0

Listas encadeadas


Brown.

Pergunta

Quero implementar a função de ordenação SelectionSort no contexto

de vetores dinâmicos. Deve funcionar para listas encadeadas.

A entrada/saıda do programa deve ser feita por arquivo.

Segue meu codigo com vetores dinâmicos,

como ficaria para listas encadeadas?

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


void SelectionSort(int a[], int array_size);
int Leitura_Dinamica_Arquivo_Inteiros(char *nome_arquivo, int *numeros[], int *tamanho);


int main(int argc, char *argv[])
  {
      //FILE *arquivo;
    int *numero;
    int j, lidos = 10;

    if(argc < 2)
      {
        printf("\nErro: Digite o nome do arquivo !!!\n\n");
        exit(1);
    }


    if (Leitura_Dinamica_Arquivo_Inteiros(argv[1], &numero, &lidos)) //se memoria alocada?
    {
        printf("\n\nQuantidade de numeros lidos: %d\n", lidos);
        printf("Os numeros são:\n");
        for(j=0; j<lidos; j++) 
        { 
            printf("numero[%d] = %d\n", j, numero[j]);
        }
        
        printf("\nOs numeros ordenados:\n");
        SelectionSort(numero, lidos);
        for(j=0; j<lidos; j++) 
        { 
            printf("numero[%d] = %d\n", j, numero[j]);
        }
    }
        free(numero);
    
    return(0);
    
  }

int Leitura_Dinamica_Arquivo_Inteiros(char *nome_arquivo, int *numeros[], int *tamanho)
{
    FILE *arquivo;
    int lidos = 0;
    
    if((arquivo = fopen(nome_arquivo,"r")) == NULL)
    {
        printf("Erro ao abrir arquivo!!!\n\n");
        exit(1);
    }
    fscanf(arquivo, "%d", tamanho);
    int *ptr = (int *) malloc((*tamanho) * sizeof(int));
    if(ptr == NULL) return 0; //memoria não alocada
    lidos = 0;
    while (fscanf(arquivo, "%d", &ptr[lidos]) == 1)
    { 
        lidos++;
    }
    fclose(arquivo);
    *numeros = ptr;

    return 1;
 }


void SelectionSort(int a[], int array_size)
{
     int i;
     for (i = 0; i < array_size - 1; ++i)
     {
          int j, min, temp;
          min = i;
          for (j = i+1; j < array_size; ++j)
          {
               if (a[j] < a[min])
                    min = j;
          }

          temp = a[i];
          a[i] = a[min];
          a[min] = temp;
     }
}

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...