Alocaçao Dinâmica. [RESOLVIDO]

1. Alocaçao Dinâmica. [RESOLVIDO]

???
gokernel

(usa Linux Mint)

Enviado em 25/01/2010 - 19:37h


Olá, gostaria de saber(neste pequeno programa) como o TERCEIRO ITEN cadastrado como o PRIMEIRO, fazendo a lista assim descer.

Espero que compreendam o programa.

Grato.

gokernel
gokernel@hotmail.com

//################################################
#include <stdio.h>
#include <string.h>
#include <malloc.h>


struct NOME {
char name[50];
struct NOME *proximo;
}*primeiro, *ultimo;


void store(struct NOME *i) {

if (!primeiro) { // Primeiro elemento da lista
i->proximo = NULL;
ultimo = i;
primeiro = i; // Gravado para INDEX COMO PRIMEIRO.
return;
}

i->proximo = NULL;
ultimo->proximo = i;
ultimo = i;
}


void enter() {
char str[100];
struct NOME *info = malloc(sizeof(struct NOME));

printf("Digite um nome: "); gets(str);
strcpy(info->name, str);

store(info);
}


int main() {
struct NOME *info;
int count=0;

primeiro = ultimo = NULL;

for (count=1; count <= 5; count++)
enter();

count=0;
// Lista os ITENS
info = primeiro;
while (info) {
printf("ITEN: %d - %s\n", count, info->name);
count++;
info = info->proximo;
}

//---------------------------------------------
// Agora, como faço para o TERCEIRO nome apareça com o PRIMEIRO
// e assim fazendo a lista descer.
//---------------------------------------------

// EXEMPLO PARA CADASTRAR:
// maria
// inacio
// joao <------ aqui deve aparecer como PRIMEIRO
// bruno
// paulo

// ESPERO UM RESULTADO DESTE TIPO:
// joao <------ O PRIMEIRO
// maria
// inacio
// bruno
// paulo

return 0;
}
//##########################################



  


2. MELHOR RESPOSTA

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 29/01/2010 - 19:05h

struct NOME *temp , *joao , *p;

/* Obtem o endereco do nome antes de joao e o armazena em p */
while ( strcmp( p->proximo->nome ,"joao") ) {
p = p->proximo ;
}

joao = p->proximo ;
temp = joao->proximo ; // Salva o endereço que vem depois do joão
free(joao) ; // libera a memória do item joão
p->proximo = temp ;

Fiz uns testes aqui e obtive resposta positiva. Tente aí depois e diga o que deu.

Abraços
t+



3. Esbocinho

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 26/01/2010 - 04:15h

O que fiz aqui foi um esboço das operações que você pode executar para mudar o sentido de sua lista.

O interessante é que você só vai mudar os ponteiros de posição, sem precisar mover espaço de memória ou
algo parecido.

É o seguinte:

1) Salve o endereço inical da lista (maria)
2) Aponte o inicio da lista para o endereço de joao
3) Obtenha o endereço do elemento acima do joao (inacio)
4) Ligue o campo proximo do endereço de 3) com joao->proximo (ligue inacio com bruno)
5) Por fim, ligue o joao->proximo ao endereço inicial antigo da lista (ligue joao a maria)

Acho que funciona, você só precisa traduzir esse esboço para um código em C.

t+


4. Re: Alocaçao Dinâmica. [RESOLVIDO]

???
gokernel

(usa Linux Mint)

Enviado em 28/01/2010 - 15:16h


Como não consegui entender/funcionar, então fui procurar ajuda e encontrei aqui:
http://www.unidev.com.br/phpbb3/viewtopic.php?f=36&t=50532

Mesmo assim obrigado pelo esforço.

gokernel.
gokernel@hotmail.com


5. Re: Alocaçao Dinâmica. [RESOLVIDO]

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 28/01/2010 - 19:46h

De boa.. ficou meio confuso mesmo, com um código você deve entender melhor:

struct NOME *p , *joao , *tmp_primeiro ;

p = primeiro ;

/* Obtem o endereco do nome antes de joao e o armazena em p */
while ( strcmp( p->proximo->nome ,"joao") ) {
p = p->proximo ;
}

tmp_primeiro = primeiro ;
joao = p->proximo ;

primeiro = joao ;
p->proximo = joao->proximo ;
joao->proximo = tmp_primeiro ;

t+


6. Para concluir.

???
gokernel

(usa Linux Mint)

Enviado em 29/01/2010 - 10:37h

Aproveitando o espaço e para marcar o tópico como resolvido... se me permite, só mais uma pergunta.

Agora, como eu libero a memória só de um ITEN? =).

Abraços.

gokernel
gokernel@hotmail.com



7. Resolvido.

???
gokernel

(usa Linux Mint)

Enviado em 30/01/2010 - 20:47h

Obrigado mesmo amigão... funcionou e foi resolvido.

+ FÁCIO..., só vc vindo aqui fazer para mim... BRINCADEIrinha =).

Abraços.

gokernel
gokernel@hotmail.com






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts