Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

darkchrono

inverter lista

Recommended Posts

ae pessoal, bom o desafio q tivemos aqui no forum era para inverter a lista, mas eu nao consegui acertar todo o codigo, algum poderia me ajudar consertar o codigo para mim ??? sei que ele nao ta mexendo no primeiro elemento da lista e tals... mas sei la consertar isso hehe

 

ta ai o codigo:

 

struct listas{
	int info;
	struct listas* prox;
};
typedef struct listas lista;

lista* ivertelista(lista *s){
lista *aux,*aux2,*aux3;
 if(s->prox == NULL) return s;//verifica se a lista esta vazia
  aux = s->prox; //aux aponta para o primeiro elemento
  aux2=aux->prox;//aux2 aponta para o segundo elemento ou para NULL
	while(aux2!=NULL){
	 aux3=aux2->prox;//aux3 aponta para o elemento posterior ao aux2 ou para NULL
	 aux2->prox = aux;//faz o prox de um elemento apontar para o seu elemento anterior
	 aux = aux2;//aux aponta para o elemento posterior a ele
	 aux2= aux3;//aux2 aponta para o elemento posterior a ele ou para NULL
	}
 s->prox->prox = NULL;//faz o ponteiro prox do ultimo elemento apontar para NULL
 s->prox = aux;//faz o aux ser o primeiro elemento
return s;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eae Pessoal aproveitando esse topico como eu faço essa lista usando vetor? nao to conseguindo fazer a inversao.

 

void Mostra_Invertido(TipoLista *lista){
	 int aux;
	 printf("Mostra Invertido: ");
	 aux = lista->final;
	 lista->final=lista->inicio;
	 lista->inicio = aux;
	 while(lista != NULL){
	// for(aux=lista.inicio;aux<(lista.final);aux++){
			 printf("%d \n12", lista->vetor[lista->final]);
   			 
			 }
			 printf("\n");
			 }

Pessoal me de uma luz!

Compartilhar este post


Link para o post
Compartilhar em outros sites

você quer inverter uma lista com vetor?

 

nao é so fazer assim???

 

//a variavel fim_da_lista é a quantidade de elementos da lista subtraido por 1.

 

for (x=0; x<= fim_da_lista / 2; x++){
	aux = vetor[x];
	vetor[x] = vetor[fim_da_lista - x];
	vetor[fim_da_lista - x] = aux;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara eu ainda nao entendi totalmente...

 

vou por aqui o codigo desse link que você passou:

 

void inverterordem(struct Tfila *F){

 struct Tno *aux,*aux1,*temp;
 aux=NULL;
 aux1=F->prim;
 temp=aux1->prox;

	while(aux1!=NULL){
		aux1->prox=aux;
		aux=aux1;
		aux1=temp;
		   if(temp!=NULL){
		   temp=temp->prox;
		  }
	}

 temp=F->prim;
 temp->prox=NULL;
 F->prim=F->ult;
 F->ult=temp;
}

" aux1=F->prim;"

Essa é minha duvida, o ponteiro q aponta pro primeiro elemento da lista, q no caso é F->prim

Como seria esse F->prim no caso da lista encadeada que foi passada no desafio ?

 

pq se você notar, no codigo que eu passei para você no desafio(esta no meu primeiro post desse topic), o primeiro elemento da lista seria o s->prox, mas o correto seria que o s->prox fosse o segundo, certo ???

entao.. eu simplesmente nao tava conseguindo fazer apontar pro primeiro elemento da lista....

 

conseguiu entender oq eu quis dizer?? hehe ta meio confuso, mas dê uma olhada ae...

 

 

obrigado !!

Compartilhar este post


Link para o post
Compartilhar em outros sites

q eu entendi da sua duvida é a msm coisa q a passada no desafio! observe a explicação q um membro utiliza:

 

aux = end; //end é o ponteiro que aponta no ultimo elemento

 

end = first; //first é o ponteiro que ta no primeiro elemento, o end passa a aponter pro começo

 

first = aux; //Agora o primeiro passa a apontar a antiga localizaçao do end.

 

aux = NULL; //segurança ^^

Ta invertida.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, dei uma arrumada no meu codigo mas ele nao ta imprimindo ao contrario. Nao to conseguindo enxerguar o erro.

 

void Mostra_Invertido(TipoLista *lista){

int aux ;

printf("Mostra Invertido: ");

 

for (lista->inicio=0 ; lista->inicio<= lista->final ; lista->inicio++){

aux = lista->vetor[lista->final];

lista->vetor[lista->final] = lista->vetor[lista->inicio];

lista->vetor[lista->inicio] = aux;

printf("\n%d", lista->vetor[lista->inicio]);

 

}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

q eu entendi da sua duvida é a msm coisa q a passada no desafio! observe a explicação q um membro utiliza:

 

aux = end; //end é o ponteiro que aponta no ultimo elemento

 

end = first; //first é o ponteiro que ta no primeiro elemento, o end passa a aponter pro começo

 

first = aux; //Agora o primeiro passa a apontar a antiga localizaçao do end.

 

aux = NULL; //segurança ^^

Ta invertida.

hum.... como ficaria a funcao "criar" dessa lista encadeada??

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom eu faria o inicio e o fim apontar par o null

inicio = final = NULL;

Compartilhar este post


Link para o post
Compartilhar em outros sites

struct listas{
	int info;
	struct listas* prox;
};
typedef struct listas lista;

void criar(lista **I, lista **F){
   *I = NULL;
   *F = NULL;
}

int main (){

lista *inicio,*fim;

criar (&inicio,&fim);

return 0;
}

ficaria assim entao ??

Compartilhar este post


Link para o post
Compartilhar em outros sites

galera,

a idéia de inverter a lista não é tão complexa.

 

Peço desculpas, pois estou sem tempo para analisar cada código desses postado.

Vou passar uma idéia para clarear um pouco.

 

Tenho um laço que vai passando pelos elementos.

 

1º elemento aponta para NULL

2º elemento aponta para 1º

3º elemento aponta para 2º

.

.

Nº elemento aponta para n-1

 

Voces precisam de uma variável que armazene o elemento anterior e uma que armazene o proximo elemento, já que este será "perdido".

 

Dica: Teste cada interação. Para isso coloque printf a cada passagem do laço para acompanhar o que o código está fazendo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

faz um tempinho q naum mecho com listas encadeadas,.

veja esse link, explica bem sobre listas encadeadas: http://www.ime.usp.br/~pf/algoritmos/aulas/lista.html

e esse outro q o cara ta criando uma lista: http://scriptbrasil.com.br/forum/index.php?showtopic=117228

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.