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

algoritmo para lista ligada


aninha1988

Pergunta

:unsure: Alguém conhece algum algoritmo...algum codigo que inverta os elementos de uma lista ligada...mas não o jeito convencional...trocar o primeiro pelo segundo ...depois o segundo pelo terceiro...ateh que toda a lista esteja invertida....preciso de algo que seja mais rapido...por exemplo....tenho uma lista duplamente ligada com variaos elelemntos indexados...preciso trocar o elemento de indice 2 pelo de indice 5...o de indice 3 pelo de indice 4....tipo invertendo apenas slices da lista....

se a minha slice for de tamanho impar...preciso inverter is elemntos da ponta ateh que chegue no elemento central....usando um ponteiro de estrutura que aponta para a proxima celula enquanto o outro aponta para a anterior....ateh que eles se encontrem ....

se alguém souber como fazer para me ajudar...agradeço....

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

sei do metodo quick sort... veja ! so que usa recursividade..roda ele ae ..acho que você vai entender !

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX 100

void parte(int arquivo[],int inicio,int fim, int *j);
void quicksort(int arquivo[],int inicio,int fim);

void main(){

    int arquivo[MAX],i,inicio,fim,j;
     clrscr();
    for (i=0;i<MAX;i++){
        arquivo[i]=rand ()%10000;
    }

    inicio=0;

    fim=MAX;

    for (i=0;i<MAX;i++){
        printf("Vetor [%d]=%d\n ",i+1,arquivo[i]);
    }
    quicksort(arquivo,inicio,fim);
    printf("VETOR ORDENADO \n\n\n\n\n");

    for (i=0;i<MAX;i++){
        printf("Vetor [%d]=%d\n ",i+1,arquivo[i]);
    }

    getch();

}

void parte(int arquivo[],int inicio,int fim,int *j){
    int a , down, up, temp;
    a=arquivo[inicio];
    up=fim;
    down=inicio;
    while (down<up){
        while(arquivo[down]<=a && down<fim){
            down++;
        }
        while (arquivo[up]>a){
            up --;
        }
        if (down<up){
            temp=arquivo[down];
            arquivo[down]=arquivo[up];
            arquivo[up]=temp;
        }
      }
    arquivo[inicio]=arquivo[up];
    arquivo[up]=a;
    *j=up;
}

void quicksort(int arquivo[],int inicio,int fim){
    int j;
    if(inicio>=fim){
        return;
    }
    parte(arquivo,inicio,fim,&j);
    quicksort(arquivo,inicio,j-1);
    quicksort(arquivo,j+1,fim);
}

Link para o comentário
Compartilhar em outros sites

  • 0
sei do metodo quick sort... veja ! so que usa recursividade..roda ele ae ..acho que você vai entender !

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX 100

void parte(int arquivo[],int inicio,int fim, int *j);
void quicksort(int arquivo[],int inicio,int fim);

void main(){

    int arquivo[MAX],i,inicio,fim,j;
     clrscr();
    for (i=0;i<MAX;i++){
        arquivo[i]=rand ()%10000;
    }

    inicio=0;

    fim=MAX;

    for (i=0;i<MAX;i++){
        printf("Vetor [%d]=%d\n ",i+1,arquivo[i]);
    }
    quicksort(arquivo,inicio,fim);
    printf("VETOR ORDENADO \n\n\n\n\n");

    for (i=0;i<MAX;i++){
        printf("Vetor [%d]=%d\n ",i+1,arquivo[i]);
    }

    getch();

}

void parte(int arquivo[],int inicio,int fim,int *j){
    int a , down, up, temp;
    a=arquivo[inicio];
    up=fim;
    down=inicio;
    while (down<up){
        while(arquivo[down]<=a && down<fim){
            down++;
        }
        while (arquivo[up]>a){
            up --;
        }
        if (down<up){
            temp=arquivo[down];
            arquivo[down]=arquivo[up];
            arquivo[up]=temp;
        }
      }
    arquivo[inicio]=arquivo[up];
    arquivo[up]=a;
    *j=up;
}

void quicksort(int arquivo[],int inicio,int fim){
    int j;
    if(inicio>=fim){
        return;
    }
    parte(arquivo,inicio,fim,&j);
    quicksort(arquivo,inicio,j-1);
    quicksort(arquivo,j+1,fim);
}

valeu...vou tentar usa-lo no meu programa...

Link para o comentário
Compartilhar em outros sites

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,3k
×
×
  • Criar Novo...