Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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)//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);
}
}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
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.
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
Que parte do exemplo não entendeu? "t" seria o nome do tipo que você está usando pra nós da lista.
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.
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.