Jump to content
Sign in to follow this  
rgcouto

[Dúvida] Listas Ligadas

Recommended Posts

rgcouto

Boas,

Estou aqui com uma dúvida, alguém me pode dar o código de inserção à cabeça de Listas Ligadas? É que tinha o código, mas entretanto nao sei onde o pûs :/

Abraço..


www.rgcouto.net

Share this post


Link to post
Share on other sites
Black Tiger III

Boas,

Estou aqui com uma dúvida, alguém me pode dar o código de inserção à cabeça de Listas Ligadas? É que tinha o código, mas entretanto nao sei onde o pûs :/

Abraço..

inserir á cabeça?

Ora bem, deixa ver se ainda me lembro disso:

typedef struct coisasInuteis
{
int b;
char nome[10];
struct coisasInuteis *next;
} *MesmoInuteis;



int insere(MesmoInuteis realmenteInuteis, int bla, char uuuu[10])
{
MesmoInuteis * aux;
aux=(MesmoInuteis*)malloc(sizeof(MesmoInuteis));
aux->b=bla;
strcpy(aux->nome, uuuu);
aux->next=realmenteInuteis;
return 0;
}

Acho que é assim, não testei, mas pelo que me lembro, truclas =D

Abraços BTIII


Órale MI RAZA, MY BLOOD HOLMES BELONGS TO ME ÉSE...

EENNNGGGGEEEENNNNNNNHHHHAAAARRRRRIIIIIIIIIIAAAAAAAINFORMATICASISTEMAS....

Share this post


Link to post
Share on other sites
nata79

inserir á cabeça?

Ora bem, deixa ver se ainda me lembro disso:

typedef struct coisasInuteis
{
int b;
char nome[10];
struct coisasInuteis *next;
} *MesmoInuteis;



int insere(MesmoInuteis realmenteInuteis, int bla, char uuuu[10])
{
MesmoInuteis * aux;
aux=(MesmoInuteis*)malloc(sizeof(MesmoInuteis));
aux->b=bla;
strcpy(aux->nome, uuuu);
aux->next=realmenteInuteis;
return 0;
}

Acho que é assim, não testei, mas pelo que me lembro, truclas =D

Abraços BTIII

acho que tem aí alguns erros... o MesmoInuteis já é um apontador pa estrutura, logo o aux vai ser um apontador para apontador e n tás a modificar a lista inicial, acho que o melhor seria a função retornar MesmoInuteis, algo tipo:

MesmoInuteis insere(MesmoInuteis realmenteInuteis, int bla, char uuuu[10])
{
MesmoInuteis aux;
aux=(MesmoInuteis)malloc(sizeof(MesmoInuteis));
aux->b=bla;
strcpy(aux->nome, uuuu);
aux->next=realmenteInuteis;
return aux;
}

Share this post


Link to post
Share on other sites
Black Tiger III

é pá é provavel, nada que um compilador não resmunga-se, tirando não devlver a lista.

Ele disse que queria inserir á cabeça, não disse que queria devolver ;)

fiu

:P

Nata79, por acaso voce não ser o pastel...


Órale MI RAZA, MY BLOOD HOLMES BELONGS TO ME ÉSE...

EENNNGGGGEEEENNNNNNNHHHHAAAARRRRRIIIIIIIIIIAAAAAAAINFORMATICASISTEMAS....

Share this post


Link to post
Share on other sites
TheDark

Nata79, por acaso voce não ser o pastel...

Meninos, PM ftw ;)

Nata79, ali na linha

aux=(MesmoInuteis)malloc(sizeof(MesmoInuteis));

estás a reservar espaço para um apontador. É preciso adicionar outra definição no typedef para alocar espaço correctamente:

typedef struct _coisasInuteis
{
/* (...) */
} CoisasInuteis, *MesmoInuteisP;

/* (...) */
aux=(MesmoInuteisP)malloc(sizeof(CoisasInuteis));
/* (...) */


Desaparecido.

Share this post


Link to post
Share on other sites
Nazgulled

Ou então tirar o * do typedef e usa-lo só quando necessário, ou seja, sempre menos no sizeof :X

Share this post


Link to post
Share on other sites
nata79

e para inserir as strings ordenadamente o que fazem? usam o stcmp?

sim... s o resultado d strcmp for positivo a segunda string é "maior" que a primeira, s for negativo é o contrário e se for 0 são iguais... axo eu que é mais ou menos isto... faço sempre uma confusão dos diabos com o strcmp...

Share this post


Link to post
Share on other sites
hpaixao
sim... s o resultado d strcmp for positivo a segunda string é "maior" que a primeira, s for negativo é o contrário e se for 0 são iguais... axo eu que é mais ou menos isto... faço sempre uma confusão dos diabos com o strcmp...

Nata, realmente acho que fizeste confusão:

strcmp( s, v) > 0 ----> s é "maior" que v

strcmp(s, v) == 0 -----> s é igual a v

strcmp(s,v) <0 ------> s é "menor" que v

Share this post


Link to post
Share on other sites
troser

Eu já sei inserir à cabeça e no fim da lista.

E se quisermos fazer a inserção no meio da lista,

Por exemplo:

typedef struct celula *LInt;
struct celula{
  int valor;
  LInt next;
};

LInt insert_at (LInt, int, int)

Em que LInt é a lista, o primeiro int é o inteiro que quero inserir e o segundo int é a posição. Se a posição for maior que o tamanho da lista o valor é inserido no fim desta.

Share this post


Link to post
Share on other sites
Baderous

Tens que ir percorrendo a lista e ir contando sempre o nº de elementos que já percorreste (através de um acumulador). Quando estiveres no elemento cuja posição é igual n-1 (sendo n a posição onde queres inserir), crias o novo nodo e alteras os apontadores.

Share this post


Link to post
Share on other sites
troser

Já tenho aqui algo que acho que funciona. Fica aqui pra quem quiser. Agradecimentos a quem me fez isto e me aturou pra me explicar.  :P

typedef struct listaligada{

int valor;
struct listaligada *prox;

} * LInt;



LInt insert_at (LInt l, int v, int p){

int i;
LInt k, ik, novo;

if(l==NULL){
	l=(LInt) malloc(sizeof(struct listaligada));
	l->valor=v;
	l->prox=NULL;

}else if (p==0){
	LInt aux;
	aux=(LInt) malloc (sizeof(struct listaligada));
	aux->valor=v;
	aux->prox=l;
	l=aux;
        }else{
	i=0;
	k=l;

	while(i<p || k!=NULL){
	  ik=k; //guarda o anterior
	  i++;  //aumenta o contador
		  k=k->prox; //avança na lista
	}

	novo=(LInt) malloc(sizeof(struct listaligada));
	novo->valor=v;
	novo->prox=k;
	ik->prox=novo;
}
   return l;

}

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.