Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // TAD (Tipo Abstrato de Dados) - lista de aniversariantes
- // Versão 3: lista encadeada (utilização bastante otimizada da memória)
- #include <stdio.h>
- #include <stdlib.h>
- #define MAX_LISTA_VETOR 50
- #define MAX_CARACTERES_NOME 20
- typedef struct {
- int dia, mes;
- } DataAniver;
- typedef struct {
- char apelido[MAX_CARACTERES_NOME];
- DataAniver dataAniver;
- } Aniversariante;
- typedef struct no { // estruturas auto-referenciadas exigem um nome na declaração da struct
- Aniversariante *info;
- struct no *prox;
- } No;
- typedef struct {
- int qtde;
- No *inicio;
- } Lista;
- // protótipos
- void inicia(Lista *pLista);
- int insere(Lista *pLista, Aniversariante *elemento);
- void entrada(Aniversariante *elemento);
- void exibe(Aniversariante *elemento);
- void exibeTudo(Lista *pLista);
- // Inclui 2 aniversariantes na lista
- int main() {
- // cria a lista alocando apenas um ponteiro.
- Lista lista;
- inicia(&lista);
- Aniversariante *aux;
- // entrada e armazenamento do primeiro aniversariante
- aux = (Aniversariante*)malloc(sizeof(Aniversariante));
- entrada(aux);
- insere(&lista,aux);
- // entrada e armazenamento do primeiro aniversariante
- aux = (Aniversariante*)malloc(sizeof(Aniversariante));
- entrada(aux);
- insere(&lista,aux);
- // exibe toda a lista de aniversariantes
- exibeTudo(&lista);
- return 0;
- }
- // inicializa a lista, ajustando a qtde para zero e o ponteiro inicial para NULL
- void inicia(Lista *pLista) {
- pLista->qtde = 0;
- pLista->inicio = NULL;
- }
- // insere um aniversariante na lista
- int insere(Lista *pLista, Aniversariante *elemento) {
- No *novo = (No*)malloc(sizeof(No));
- novo->prox = pLista->inicio;
- pLista->inicio = novo;
- novo->info = elemento;
- pLista->qtde++;
- }
- // recebe da entrada padrão os dados de um aniversariante e o coloca na memória "elemento"
- void entrada(Aniversariante *elemento) {
- printf("\nEntre com o nome do aniversariante: ");
- fflush(stdin);
- gets(elemento->apelido);
- printf("Entre com o dia e mes do aniversario: ");
- scanf("%d %d", &elemento->dataAniver.dia, &elemento->dataAniver.mes);
- }
- // exibe os dados de um aniversariante passado como argumento
- void exibe(Aniversariante *elemento) {
- printf("\nNome: %s \nData do aniversario: %02d/%02d", elemento->apelido,
- elemento->dataAniver.dia, elemento->dataAniver.mes);
- }
- // exibe toda a lista
- void exibeTudo(Lista *pLista) {
- int i;
- // o ponteiro p aponta para o início da lista e a cada iteração aponta para o próximo elemento
- No *p = pLista->inicio;
- for(i=0; i < pLista->qtde; i++) {
- exibe(p->info);
- p = p->prox; // faz p apontar para o próximo elemento
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement