Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // TAD (Tipo Abstrato de Dados) - lista de aniversariantes
- // Versão 2: vetor de ponteiros (utilização melhor da memória, e mais eficiente)
- #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 {
- int qtde;
- Aniversariante *vetor[MAX_LISTA_VETOR]; // os elementos do vetor são ponteiros
- } Lista;
- // protótipos
- void inicia(Lista *lista);
- int insere(Lista *lista, Aniversariante *elemento);
- void entrada(Aniversariante *elemento);
- void exibe(Aniversariante *elemento);
- // Inclui 2 aniversariantes na lista
- int main() {
- // cria a lista alocando apenas um ponteiro para cada aniversariante, independente de usar ou não
- Lista lista;
- inicia(&lista);
- Aniversariante *aux; // nesta versão, ao invés de alocar uma estrutura aloca-se um ponteiro
- // entrada e armazenamento do primeiro aniversariante
- // nesta versão, para cada novo aniversariante deve-se alocar uma nova memória
- aux = (Aniversariante*)malloc(sizeof(Aniversariante));
- entrada(aux); // aux é passado diretamente, pois é um endereço
- insere(&lista,aux); // aux é passado diretamente, pois é um endereço
- // entrada e armazenamento do primeiro aniversariante
- aux = (Aniversariante*)malloc(sizeof(Aniversariante));
- entrada(aux);
- insere(&lista,aux);
- // exibe toda a lista de aniversariantes
- int i;
- for(i=0; i < lista.qtde; i++)
- exibe(lista.vetor[i]); // nesta versão, basta passar o elemento do vetor, que é um endereço
- return 0;
- }
- // inicializa a lista, ajustando a qtde para zero
- void inicia(Lista *lista) {
- lista->qtde = 0;
- }
- // insere um aniversariante na lista
- int insere(Lista *lista, Aniversariante *elemento) {
- if(lista->qtde == MAX_LISTA_VETOR)
- return 0; // indicação de erro: atingiu o limite da lista
- lista->vetor[lista->qtde] = elemento; // na versão 2, apenas o endereço é copiado para o vetor
- lista->qtde++;
- return 1;
- }
- // 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);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement