Jump to content
black

Inserir nodo no fim de uma lista

Recommended Posts

black

Boas pessoal, tive que fazer um exercício porem queria apenas que alguém me confirmasse se realmente esta forma esta certa!

É o seguinte, tenho estas estruturas:

typedef struct Cel

{ int elem;

struct Cel* next;

} Celula , *LISTA;

typedef struct

{ LISTA a;

LISTA b;

} DUASLISTAS

E o exercício é o seguinte:

Escreva em C a função insNodoFim, que insere um nodo (não um valor) no fim de uma lista. O tipo da função e:

LISTA insNodoFim (Celula * , LISTA )

Como tal fiz a seguinte função:

LISTA insNodoFim (Celula *nodo , LISTA l)
{
LISTA aux;
aux=(LISTA)malloc(sizeof(Celula));
aux=nodo;

if(!l)
{
	aux=nodo;
	aux->next=NULL;

	return aux;
	}

else
{
	while(l->next!=NULL)
	{
		l=l->next;

		}
	l->next=NULL;
	l->next=aux;

	}
return l;
}

e no main chamei assim:

  LISTA a = NULL;
	a = inserir(inserir(inserir(inserir(a, 7),10),12),14);
Celula *c=NULL;
       c=insNodoFim(c,a);

Acham que esta bem?

Já agora não a forma de eu testar inserindo um valor?

tipo já tentei por em vez de Celula *c=NULL; por Celula *c={90,NULL}; ou algo parecido mas nada funciona. Não me podem dar uma ideia como posso fazer esta igualdade de forma a passar um valor(neste caso o 90) para ser inserido e assim já testava se realmente inseria no fim.

Desde ja obrigado.


.:: C ::. .::Haskell::. .::VB::. .::PHP::.

Share this post


Link to post
Share on other sites
Localhost

Não entendi. Queres que te digam se a função está bem? Já a testaste?

Em relação à outra questão, utiliza o operador ->.


here since 2009

Share this post


Link to post
Share on other sites
black

Não entendi. Queres que te digam se a função está bem? Já a testaste?

Em relação à outra questão, utiliza o operador ->.

Não da erros mas como nao consigo passar valores nao testo, por isso nao sei se esta certo.

como? ->?

        Celula *c=NULL;
               c=insNodoFim(c,a);

eu mando-lhe o c a NULL, mas quero por exemplo passar um 90. Mas nao arranjo forma de conseguir.


.:: C ::. .::Haskell::. .::VB::. .::PHP::.

Share this post


Link to post
Share on other sites
pikax

Não percebi muito bem... :)


Celula *c=(Celula*)malloc(sizeof(Celula));
c->elem=90;
c->next=0;

Não sei se tá certo, não gosto muito de aplicar memória dinâmica em C, troco-me todo com os malloc, realloc e memloc  😳


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
Localhost

o next não pode ser 0 porque é um apontador, põe NULL

NULL e 0 são exactamente a mesma coisa.


here since 2009

Share this post


Link to post
Share on other sites
kokishoPT

olha que NULL e 0 sao bem diferentes, nao e por acaso que na tabela ascii tem valores diferentes  :smoke:

Share this post


Link to post
Share on other sites
KTachyon

Char   Dec   Oct   Hex |
------------------------
(nul)    0  0000  0x00 |

É zero. Mas o código fica mais legível se escreveres NULL.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
Localhost

olha que NULL e 0 sao bem diferentes, nao e por acaso que na tabela ascii tem valores diferentes  :smoke:

Estás a cometer um erro comum, achar que NULL e 0 são diferentes. Ora aqui está a opinião do criador do C++ em relação a isto:

Should I use NULL or 0?

In C++, the definition of NULL is 0, so there is only an aesthetic difference. I prefer to avoid macros, so I use 0. Another problem with NULL is that people sometimes mistakenly believe that it is different from 0 and/or not an integer. In pre-standard code, NULL was/is sometimes defined to something unsuitable and therefore had/has to be avoided. That's less common these days.

If you have to name the null pointer, call it nullptr; that's what it's going to be called in C++0x. Then, "nullptr" will be a keyword.

Fonte: http://www2.research.att.com/~bs/bs_faq2.html#null

:smoke:


here since 2009

Share this post


Link to post
Share on other sites
Baderous

Estás a cometer um erro comum, achar que NULL e 0 são diferentes. Ora aqui está a opinião do criador do C++ em relação a isto:

Pois, mas isso é em C++, não em C:

C99 7.17.3

The macros are NULL which expands to an implementation-defined null pointer constant; (...)

C99 6.3.2.3.3

An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant.

Daí que NULL poderá ser uma expressão inteira com o valor 0 (um int, long ou long long) ou um cast para void* dessa expressão. No GCC é void*.

Em máquinas de 32-bits, os apontadores têm 4 bytes, em máquinas de 64-bits têm 8 bytes. E estes por sua vez podem ter tamanhos diferentes do tipo da expressão inteira. Em 64-bits, um apontador tem 8 bytes mas um int tem 4.

Logo, em C, não se pode afirmar categoricamente que NULL é exactamente o mesmo que 0.

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

×
×
  • 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.