Ir ao conteúdo
  • Cadastre-se

ALGUEM PODE ME EXPLICAR esse programa em C?


razakito

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

Link para o comentário
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.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!