Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
washy

inserir na lista com apontador, na posição informada pelo usuário

Recommended Posts

ae turma to quebrando a cabeça com este programa em C

ocorre o seguinte: devo inserir na lista com apontador, na posição informada pelo usuário. A posição será um número e o elemento será inserido depois do item correspondente à aquela posição.

uso o C++Builder 3

meu codigo em momento algum da erro de compilacao e se eu inicio o console com a InserePosicao 1 funciona beleza depos posso inserir no inicio ou apos o utimo com outros procedimentos funciona ok mas se tento fazer procedimento InsereInicio depois InsereUltimo e em seguida InserePosicao acontece erro, trava o programa.

eis meu codigo

void InserePosicao (int po, TLista &L, Elemento &W)
{
int co=0,i;
Celula *x,*y;
if ( !(Vazia(L))){
x=L.Primeiro->Prox;
i=1;
}
while (i<po){
x=x->Prox;
co+=1;
y=(Celula*) malloc (sizeof(Celula));
(*y).Prox =(*x).Prox;
(*x).Prox=y;
(*y).Item=W;
}
x=(Celula*) malloc (sizeof(Celula));
L.Primeiro->Prox=x;
(*x).Prox=NULL;
L.Ultimo=x;
(*L.Ultimo).Item=W;
}

grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Washy, confesso que teu código me parece muito louco. Se colocasse um comentário eu entenderia melhor (posso ter achado louco por não saber do contexto - não estou dizendo que está errado, ok?).

Vou listar alguns problemas que achei aqui:

1 - se a lista for vazia, o que irá rolar? tipo, não tem um else para if ( !(Vazia(L)))...

2 - Este código aqui não entendi:

    while (i<po){
x=x->Prox;
co+=1;
y=(Celula*) malloc (sizeof(Celula));
(*y).Prox =(*x).Prox;
(*x).Prox=y;
(*y).Item=W;
}

O i é a condição do while, no entanto não está sendo incrementado (está em um loop infinito caso i seja menor que po). Em cada laço você aloca y (em um loop infinito você está alocando y toda vez - isto deve até estourar tua memória para alocações dinâmicas). Toda as vezes você está inserindo uma célula com um item w... está parte me está muito estranha, talvez seja o seguinte que você queira ter feito:


while (i<po)
{
x=x->Prox;
i++;
}
y=(Celula*) malloc (sizeof(Celula));
(*y).Prox =(*x).Prox;
(*x).Prox=y;
(*y).Item=W;

3 - Aqui foi outra coisa que não entendi:

    x=(Celula*) malloc (sizeof(Celula));
L.Primeiro->Prox=x;
(*x).Prox=NULL;
L.Ultimo=x;
(*L.Ultimo).Item=W;

O segundo elemento se tornará x. Para que isto? Não sei o contexto, mas isto me é estranho. Você está inserindo um elemento na segunda posição e está dizendo que ele não tem próximo: x->prox = NULL. Depois torna o segundo elemento sendo o último da lista. E o restante da lista? Se perderá, não? Como chegar aos demais elementos após estas linhas da código? Esta parte não entendi...

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá Lawsann tudo beleza agora

o fato é q eu não estava incrementado o i mesmo

meu while ficaria para sempre...

e estava fechado o while no local errado...

y não tinha q ser alocado todas as vezes, apenas na vez q foi encontrado a posicao passada por parametro.

aloca x tem nada a haver...

eis o codigo caso alguém precise...


void InsereP (int po, TLista &L, Elemento &W) // po -> passado a posicao por parametro
{
int i;
Celula *x,*y;
if ( !(Vazia(L))){ // Vazia é uma funcao q retorna V ou F neste caso se a L (Lista) Nao estiver vazia
x=L.Primeiro->Prox;
i=1;
}
while (i<po){ // enquanto a i=1 for menor q a posicao informada po
x=x->Prox;
i++; // incrementa
}
y=(Celula*) malloc (sizeof(Celula));
y->Prox =x->Prox;
x->Prox=y;
y->Item=W;
}

um problema q ocorre é se a lista estiver vazia e se eu pedir pra inserir na posicao 1 ai da erro

tentei fazer chamar o procedimeto insere inicio mas deu erro...

mas valeu cara brigadao

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×