/* Linked list program */
#include <stdio.h> /* this is needed to define the NULL */
#include <string.h>
#include <stdlib.h>
#define RECORDS 6
void main()
{
struct animal {
char name[25]; /* the animals name */
char breed[25]; /* the type of animal */
int age; /* the animals age */
struct animal *next; /* a pointer to a record of this type */
} *point, *start, *prior; /* it defines 3 pointers, no variables */
int index;
/* the first record is always a special case */
start = (struct animal *)malloc(sizeof(struct animal));
strcpy(start->name,"General");
strcpy(start->breed,"Mixed Breed");
start->age = 4;
start->next = NULL;
prior = start;
/* a loop can be used to fill in the rest once it is started */
for (index = 0;index < RECORDS;index++) {
point = (struct animal *)malloc(sizeof(struct animal));
strcpy(point->name,"Frank");
strcpy(point->breed,"Laborador Retriever");
point->age = 3;
prior->next = point; /* point last "next" to this record */
point->next = NULL; /* point this "next" to NULL */
prior = point; /* this is now the prior record */
}
/* now print out the data described above */
point = start;
do {
prior = point->next;
printf("%s is a %s, and is %d years old.\n", point->name,
point->breed, point->age);
point = prior;
} while (prior != NULL);
/* good programming practice dictates that we free up the */
/* dynamically allocated space before we quit. */
point = start; /* first block of group */
do {
prior = point->next; /* next block of data */
free(point); /* free present block */
point = prior; /* point to next */
} while (prior != NULL); /* quit when next is NULL */
} DYNLINK.C
|