Advertisement
Guest User

islands.c

a guest
Nov 2nd, 2015
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.36 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. /* Definimos a struct "island" */
  6. typedef struct island {
  7.     const char *name;
  8.     const char *opens;
  9.     const char *closes;
  10.     struct island *next;
  11. } island;
  12.  
  13. /* Incluímos o header após a declaração da struct para evitar erros de
  14.  * compilação */
  15.  
  16. // Declaração das funções
  17. void display(island *start);
  18. island* create(char *name);
  19. void release(island *start);
  20.  
  21. int main(int argc, char *argv[])
  22. {
  23.     // Criando as ilhas para formar o itinerário
  24.     island amity = {"Amity", "09:00", "17:00", NULL};
  25.     island craggy = {"Craggy", "09:00", "17:00", NULL};
  26.     island isla_nublar = {"Isla Nublar", "09:00", "17:00", NULL};
  27.     island skull = {"Skull", "09:00", "17:00", NULL};
  28.     island shutter = {"Shutter", "09:00", "17:00", NULL};
  29.  
  30.     // Configurando os itinerários
  31.     amity.next = &craggy;
  32.     craggy.next = &isla_nublar;
  33.     isla_nublar.next = &skull;
  34.     skull.next = &shutter;
  35.  
  36.     // Mostramos as informações do itinerário a partir da ilha "Craggy"
  37.     display(&amity);
  38.  
  39.     // Usamos a função create para criar uma nova instância de island
  40.     island *hawaii = create("Hawaii");
  41.    
  42.     // Atribuímos uma próxima ilha para que Hawaii seja impressa
  43.     hawaii->next = &skull;
  44.  
  45.     // Imprimimos informações sobre hawaii
  46.     puts("\nThe newly created island:");
  47.     display(hawaii);
  48.  
  49.     release(&amity);
  50.  
  51.     return 0;
  52. }
  53.  
  54. void display(island *start)
  55. {
  56.     // O ponteiro *i recebe a ilha passada como parâmetro
  57.     island *i = start;
  58.  
  59.     /* Iteramos sem criar uma variável, pois i será nossa referência até que
  60.      * a variável "next" da struct seja NULL (não há mais ilhas para ir)
  61.      */
  62.     for (; i->next != NULL; i = i->next)
  63.     {
  64.         printf("Name: %s open: %s-%s\n", i->name, i->opens, i->closes);
  65.     }
  66. }
  67.  
  68. // Aqui temos a função que cria uma nova island e a retorna como ponteiro.
  69. island* create(char *name)
  70. {
  71.     island *i = malloc(sizeof(island));
  72.     i->name = strdup(name);
  73.     i->opens = "09:00";
  74.     i->closes = "17:00";
  75.     i->next = NULL;
  76.  
  77.     return i;
  78. }
  79.  
  80. // Temos que liberar a memória utilizada pela aplicação
  81. void release(island *start)
  82. {
  83.     island *i = start;
  84.     island *next = NULL;
  85.     for(; i != NULL; i = next) {
  86.         next = i->next;
  87.         free(i->name);
  88.         free(i);
  89.     }
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement