Últimas notícias do Adrenaline

Uma ajuda importande com C e lista encadeada!

Solum

Solum, Filho do Papai.
Registrado
Ai pros gurus em C!
To precisando fazer uma agenda...
ela tem a seguinte struct:
struct infoAgenda {
int telefone;
char nome[80];
struct infoAgenda *proximo;
}

quem sabe implementar uma lista encadeada, sabe q o proximo eh o ponteiro q aponto para o proximo nodo...
mas eu não to conseguindo implementar! não consigo fazer uma função q insira ou delete nodos!
alguem ajuda eu!!

OLD!! Vc me parece saber muito de C hehehe
 

Solum

Solum, Filho do Papai.
Registrado
ninguem sabe C hehehhe
 

Taturana

Hungry Member
Registrado
Eu sei, mas vai custar R$100,00:D

zueira, é o seguinte... pra quando tu ta precisando disso æ? É que estou meio ocupado no momento fazendo um compilador, dependendo de que dia vc precise disso até que eu te ajudo... aproveita e passa o codigo fonte do programa æ, pra ver o que você está fazendo. ;)
 

figueira-sc

Usuário Registrado
pega

Eu perdi as funçoes que eu tinha de lista, essa ai eu tirei de um trabalho de grafos, entao eu não testei, mas a lógica esta certa.

As funçoes de arvore binaria e avl eu tenho, se tu quizer so avisar.
Esta indo a funcao para inserir a para apagar estou fazendo ainda.


typedef struct no
{
int t;
struct no *prox;

}no;


void inserir_ares (struct no *lista, int t)
{
struct no *aux,*aux1;
char vertdes[10];

aux = (struct no *) malloc (sizeof(struct no));
if(aux == NULL)
{
printf("\nFaltou memoria");
getch();
exit(1);
}
aux->prox = NULL;


aux->t = t;

if(lista->prox == NULL) {
lista->prox = aux;
}
else {
aux1 = lista->prox;
while (aux1->prox != NULL) {
aux1 = aux1->prox;
}
aux1->prox = aux;
}
}
 

figueira-sc

Usuário Registrado
resto

Não esquece de inicializar a lista, tem gente que gosta de cria uma variavel so para ser a lista, eu prefiro economizar e uso o primeiro, como sendo a lista.

Não esquece de colocar o & para chamar as funçoes.

void apagar_no (struct no *lista, int t)
{
struct no *aux;

if(lista->prox == NULL)
{
printf("Lista fazia.");
}
else {
if ( "lista->t==t)
{
lista = lista->prox;
}
else {
aux = lista;
while (aux->prox != NULL) {
if ( aux->prox)->t==t)
{
aux-> = (aux->prox)->prox;
break;
}
aux = aux->prox;
}
}
}
}
 

OldMan

Congelado
Registrado
Basicamente a teoria eh a seguinte:

cada nodo tem uma referencia para o proximo nodo ou para NULL (0 se for C++) quando for o ultimo nodo.

A flista inicia com um unico nodo que aponta para NULL. Quando vc quiser inserir algo... percorra a lista ate encontrar alguem que aponta para null. Faca este alguem apontar para seu proximo nodo e pronto..vc adicionou um novo nodo.

Se vc quiser adicionar um nodo B entre dois nodos A e C, vc deve percorre a lista ate estar em um nodo cujo PROXIMO aponta para C... entao vc guarda C em um apontador temporario. Faz A apontar para B e faz B apontar para o mesmo que o apontador temporario.


Para deletar, percorra a lista ate chegar no nodo cujo PROXIMO 'e o elemento que vc quer deletar.... armazene o elemento a ser deletado em um apontador temporario. Faca o elemnto onde vc esta apontar para o PROXIMO DO PROXIMO. Entao de um free no apontador temporario.
 

UltraViolence

Choco-Master
Registrado
só não esquece de desalocar a memória depois de destruir um nodo da fila, ou então esse programa vai cagar com a memória toda...
 

OldMan

Congelado
Registrado
O que vc acha que 'e o free que esu escrevi na penultima linha ? :)
 

Solum

Solum, Filho do Papai.
Registrado
old, infelizmente, a teoria eu sei todinha ehheheh...
to tendo problema com a sintaxe... tipo, a parada eh desafio... soh vou aprender isso daki 1 semana... e tenho q entregar daki 1 semana e talz...

agradeço a todos pelos códigos. vou testá-los aki!!

BRIGADU!
 

Solum

Solum, Filho do Papai.
Registrado
if(lista->prox == NULL)
{
printf("Lista fazia.");
}
else {
if ( "lista->t==t)
{
lista = lista->prox;
}
else {
aux = lista;
while (aux->prox != NULL) {

ta dando um bloco :(

erro na memoria coisa e tal
 

Últimas notícias do Mundo Conectado

OldMan

Congelado
Registrado
codigo:

#define NOME_NAO_ENCONTRADO -1
#define ELEMENTO_NAO_ENCONTRADO -2
#define ELEMENTO_REMOVIDO 1

int remove(infoAgenda* current, cha* nome){
if(current->proximo==NULL){
if(strcmp(current->nome,nome)==0){
free(current);
return ELEMENTO_ERA_1_LISTA;
}else{ return ELEMENTO_NAO_ENCONTRADO;}
}
if(strcmp(current->proximo->nome,nome)==0){
/*achei*/
infoAgenda* temp=current->proximo->proximo;
free(current->proximo);
current->proximo=temp;
return ELEMENTO_REMOVIDO;
}else{
return remove(current->proximo,nome);
}
};

veja se vc faz os outros
 

Solum

Solum, Filho do Papai.
Registrado
valeu old...
agora vou fazer a rotina de inserção e de imprimir os nodos... tenho q entender tudinho, pq tem q explicar o programa pro professor.
 

Usuários que está vendo este tópico

Topo