Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Ricardo15lis

Listas ligadas

Mensagens Recomendadas

Ricardo15lis

Boa tarde,

Estou com algumas duvidas na implementação de listas ligadas.

A lista é deste tipo

typedef struct
{
elemento *ini;
elemento *fim;
int tamanho;
} lst;

e tenho outra estrutura deste tipo

typedef struct_elemento
{
char *string;
struct_elemento *prox;
struct_elemento *ante;
}

Como devo implementar uma funcao em que tenho de inserir um elemento na lista(esta funcao recebe uma lista do tipo lst,uma string e a posição onde quero inserir o elemento) e uma funcao que remove um elemento na lista(esta recebe a lista do tipo lst e a posição)?

Editado por thoga31
Tags code + GeSHi + formatação

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Ricardo15lis

A primeira estrutura é uma estrutura que tem o apontador da primeira posição e da ultima.A segunda estrutura é a que deve ser usada para aceder aos outros elementos da lista( entre o inicio e o fim).

No enunciado do problema as estruturas são apresentadas assim.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

então o enunciado está errado, isso nunca irá compilar devido a :

- uso de tipos de dados não definidos

- sintaxe errada de declaração de um tipo de dados

achas que consegues identificar estes problemas no código ?


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Ricardo15lis

esqueci me de por elemento na segunda estrutura

a segunda estrutura é assim:

typedef struct_elemento
{
char *string;
struct_elemento *prox;
struct_elemento *ante;
}elemento

Editado por thoga31
Tags code + GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

novamente, os mesmos problemas ainda persistem mesmo adicionando/alterando o código que apresentas.

achas que consegues identificar estes problemas no código ?


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Ricardo15lis

Nao estou a ver qual seja o erro a funcao insere seda:

insere(lst lista,char string,elemento *pos)

seria

o problema é só uma lista ligada

mas com duas estruturas

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

- uso de tipos de dados não definidos

mesmo tendo adicionado o nome do tipo de dados criado na segunda estrutura, esta nunca está definida antes do seu uso na declaração do tipo de dados lst

- sintaxe errada de declaração de um tipo de dados

o segundo tipo de dados criado não está bem declarado, a mim parece que anda p«rai um underscore a mais, mas de eu achar ao ...


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

agora que já sabemos que esse código está errado e como corrigir, qual é mesmo o problema ?

isto porque perguntar como fazer é o mesmo que pedir o código inteiro (o que não se faz aqui no fórum), além de ser assumido que deverás ter sido apresentado à matéria de como fazer o problema.

conclusão : qual é mesmo o problema ?


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Ricardo15lis

A questão e a seguinte:não percebo porque o código abaixo da me mal

elemento* lista_insere(lista *lst,char *valor,elemeto *pos)
elemento *temp,*insere;
       insere=(elemento *)malloc(sizeof(elemento));
       if(pos==NULL)
           insere=lst->fim;
           insere->proximo=NULL;
           strcpy(insere->str,valor);
           lst->tamanho=lst->tamanho+1;
           return insere;
       temp=lst->inicio;
       while(temp!=NULL){
           if(temp==pos){
               if(pos!=lst->fim){
                   insere->proximo=temp->proximo;
                   temp->proximo=insere;
                   strcpy(insere->str,valor);
                   lst->tamanho=lst->tamanho+1;
                   return insere;
               }
           else{
                       temp->proximo=insere;
                       insere->proximo=NULL;
                       strcpy(insere->str,valor);
                       lst->tamanho=lst->tamanho+1;
                       return insere;
           }
       }

       else{
               temp=temp->proximo;
           }
       }

elemento

Editado por thoga31
Tags code + GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

ok, vamos então por partes

se dizes que "dá mal", o que é "dar mal" ? (não esperes que uma pessoa olhe para linhas e linhas de código a procura de algo que não sabe o que procurar ...

segundo, para que serve o terceiro elemento da função ? achas mesmo que é necessário ?


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Ricardo15lis

Em relação ao facto de dar mal quero dizer que na funcao main não executa nada apesar de não dar erros.O terceiro elemento é a posição na qual quero inserir o elemento e é necessário

na main a funcao só executa se tiver o terceiro elemento

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

antes de mais, como falta (pelo menos) o código de inicialização da lista, a resposta não 100% concreta, mas existe algo nas primeiras linhas do teu código que não parece correcto:

elemento* lista_insere(lista *lst,char *valor,elemeto *pos)
elemento *temp,*insere;
       insere=(elemento *)malloc(sizeof(elemento));
       if(pos==NULL)
           insere=lst->fim; // perder o ponteiro para a memória alocada 

segundo, não faz sentido o terceiro argumento da função descrita, isto porque não é normal saber o ponteiro para a posição onde irás inserir, mas sim, dizer o índice da posição que pretendes inserir na lista


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

ainda bem

mas se mesmo assim pretendes ver outras implementações de listas ligadas tens o seguinte código por mim disponibilizado aqui no fórum :

https://www.portugal-a-programar.pt/topic/63688-c-codigo-auxiliar-para-iniciantes-leitura-teclado-linked-list/


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.