Ir para conteúdo

POWERED BY:

Arquivado

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

vidaloka860

Lista ordenada

Recommended Posts

Tenho que fazer uma lista ordenada...

Ja tenho as função de inserir no inicio e no fim.

Então tendo os valores 10,20,40 se eu escolher inserir ordenado e colocar o valor 30, tem que ficar 10,20,30,40

 

Tenho os seguintes itens ja programados.

 

struct sLista
{
	int info;
	sLista *prox;
};
main()
{
	sLista *ini, *fim;
	int x, op;
	
	ini = fim = NULL; // iniciar lista (vazia)
x=30
        inserirsequencia(ini, &fim, x); 

//o mais tem muitos mais coisas, mais para evitar codigos grandes, postei so o inicial.
}
void inserirsequencia(sLista *pini, sLista **pfim, int px){
     sLista *aux, *cont;
     
	
	aux = (sLista*) malloc(sizeof(sLista));
	aux->info = px;	
	if (pini == NULL) // primeiro a inserir
	{
		pini = *pfim = aux;
		aux->prox = NULL;
	}
	else
	{
        do{
        //if(px<pini){
        aux->info = px;     
		pini = pini->prox;
        //}
      }while (pini != NULL);
      
	}
     }

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está alterando o valor do parâmetro pini. Ele é um objeto contido no contexto da função "inserirsequencia", e alterá-lo não terá efeito sobre o argumento passado para ela a partir de main (ini). Se quiser que a função modifique o ponteiro declarado em main, faça-a receber um ponteiro para ele (como fez com pfim).

 

Fora isso, parece que você não entendeu a lógica da inserção ordenada. Pense em como isto seria feito com objetos no mundo real, e depios tente descrever o processo em C.

Compartilhar este post


Link para o post
Compartilhar em outros sites

na vida real eu intendi

teria o

 

->1->3->4

ai, eu rodaria, e ficaria

[ini]->1->| ->3->4[fim]

\|/ /

2/

Soq ue no programa não sei como fazer isso, pegar um ponteiro e jogar pra fora da fila...

Poderia dar um exemplo, de como eu resolveria isso?

 

Eu fiz ate algumas mudanças para verificar, se era é maior, mais, na hora de mudar os ponteiros de lugar, não rola...

Ficaria muito grato se puder me dar um exemplo em codigo comentado sobre essa mudança de ponteiro, como não perder valor, referencia e talz.

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exemplo de inserção no meio (ao invés da cabeça) da lista:

 

 

// ... encontrar a posição através de um ponteiro "iter" que percorre cada elemento.
 
t* new = create(value);
new->next = iter->next;
iter->next = new;

 

O caso de inserção na cabeça da lista pode ser resolvido de duas formas: sempre retornando um ponteiro para o primeiro elemento da lista, independente do lugar de inserção, ou recebendo como parâmetro um ponteiro para o ponteiro para o primeiro elemento da lista e modificando-o apropriadamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

teria como vc dar um exemplo um pouco mais completo? e mais comentado o que cada parte do ponteiro ta buscando e retornando...

Esse seu exemplo me deixou mais confuso ainda hehe

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nao intendi a parte de como pegar o ponteiro anterior. Ligar no novo valor. E logar o novo valor no seguinte sem perder os ponteiros e a informacao.

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.