Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
razakito

ALGUEM PODE ME EXPLICAR esse programa em C?

Posts recomendados

Galera, estou com um problemão perdi a aula sobre LISTAS em C na faculdade e agora to perdido.

O professor passou esse programa de lista mas não entendi quase nada.

Será que alguem poderia me dar uma ideia geral sobre listas e o que esse programa faz?

#include<iostream.h>

#include<string.h>

#include<conio.h>

#define AND &&

typedef struct{

char nome[20];

char cel[20];

}Tinfo;

typedef struct NO{

NO *ant;

Tinfo dados;

NO *prox;

} TNO;

typedef struct{

TNO *pra mim;

int quant;

TNO *ulti;

}Tdesc;

void ler(Tinfo *valor)

{

cout<<"\n Nome:";

cin>>valor->nome;

cout<<"\n Telefone:";

cin>>valor->cel;

}

char menu()

{

char op;

cout<<"\n1.Insere";

cout<<"\n2.Remove";

cout<<"\n3.Mostra";

cout<<"\n4.Procura" ;

cout<<"\n5.Sair";

cout<<"\n\tOpcao:";

cin>>op;

return op;

}

void inicia(Tdesc *lista)

{

lista->pra mim = NULL;

lista->quant = 0;

lista->ulti = NULL;

}

void insere(Tdesc *lista, Tinfo *valor)

{

TNO *nova, *p;

nova = new TNO;

if(nova!=NULL)

{

nova->dados = *valor;

if(lista->quant == 0)

{

nova->ant=NULL;

nova->prox=NULL;

lista->pra mim = nova;

lista->ulti=nova;

}

else

{

p = lista->pra mim;

while((strcmp(p->dados.nome,valor->nome)<0) AND (p->prox!=NULL))

{

p = p->prox;

}

if(p==lista->pra mim AND strcmp(p->dados.nome,valor->nome)>0)

{

nova->prox = p;

nova->ant = NULL;

p->ant = nova;

lista->pra mim = nova;

}

else if((p->prox==NULL) AND (strcmp(p->dados.nome,valor->nome)<0))

{

nova->ant = p;

nova->prox = NULL;

p->prox = nova;

lista->ulti = nova;

}

else

{

nova->prox = p;

nova->ant = p->ant;

p->ant = nova;

(nova->ant)->prox = nova;

}

}

(lista->quant)++;

}

else

{

cout<<"Erro na alocacao de memoria"<<endl;

}

}

void imprime(Tdesc *lista)

{

TNO *p;

p=lista->pra mim;

cout<<"\n\n\t\tNOME\t\t\tCELULAR";

while(p!=NULL)

{

cout<<"\n\t\t"<<p->dados.nome;

cout<<"\t\t\t"<<p->dados.cel;

p=p->prox;

}

}

void main()

{

Tdesc lista;

Tinfo valor;

char op;

inicia(&lista);

do{

op=menu();

switch(op)

{

case '1': ler(&valor);

insere(&lista,&valor);

break;

case '2': /*Implemetne funcao remove*/

break;

case '3': imprime(&lista);

break;

default: if(op!='5')

{

cout<<"\n Funcao invalida!\n";

}

break;

}

}while(op!='5');

}

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

nignuem

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro isso não é C mas sim C++.

Para te explicar listas é um pouco complicado, mas para teres uma ideia uma lista é composto por vários NÓ's.

O conteudo de cada NÓ depende do tipo de lista que estás a implementar, mas todos eles têm um conteudo (onde vais guardar a tua informação) e ponteiros que te vão apontar para outros NÓ's (dependendo do tipo de lista)

Se for uma lista simples cada nó terá um ponteiro que irá apontar para o proximo NÓ

NO1 -> NO2 -> NO3 -> NULL

Se for uma lista duplamente ligada cada NÓ terá dois ponteiros um para o proximo e outro para o anterior

NO1 <=> NO2 <=> NO3 -> NULL

Se for uma lista circular o ultimo NO aponta para o primeiro. Se for duplamente ligada é so colocar um NO para o proximo e para o anterior.

NO1 -> NO2 -> NO3 -> (NO1)

Mas se souberes trabalhar bem com ponteiros aprendes isso num instante.

Eu tentei explicar mas se quiseres que te explique melhor manda-me um mail que eu adiciono-te no messenger.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!