typedef struct list
{
void *data;
struct list *next;
} List;
int main(void)
{
List *list1,
*list2, *list3, *list4;
char c[] = { 'a',
'b', 'c', 'd' };
int i[] = { 1, 2,
3, 4 };
char *str[] = {
"hello1", "hello2", "hello3", "hello4"
};
list1 = list2 =
list3 = list4 = NULL;
insert(&list1,
&c[0], sizeof(char));
insert(&list1,
&c[1], sizeof(char));
insert(&list1,
&c[2], sizeof(char));
insert(&list1,
&c[3], sizeof(char));
insert(&list2,
&i[0], sizeof(int));
insert(&list2,
&i[1], sizeof(int));
insert(&list2,
&i[2], sizeof(int));
insert(&list2,
&i[3], sizeof(int));
insert(&list3, str[0], strlen(str[0])+1);
insert(&list3,
str[1], strlen(str[0])+1);
insert(&list3,
str[2], strlen(str[0])+1);
insert(&list3,
str[3], strlen(str[0])+1);
insert(&list4,
&chk[0], sizeof chk[0]);
insert(&list4,
&chk[1], sizeof chk[1]);
insert(&list4,
&chk[2], sizeof chk[2]);
printf("Printing
characters:");
print(list1,
printchar);
printf(" :
done\n\n");
printf("Printing
integers:");
print(list2,
printint);
printf(" :
done\n\n");
printf("Printing
strings:");
print(list3,
printstr);
printf(" :
done\n\n");
printf("Printing
composite:");
print(list4,
printcomp);
printf(" :
done\n");
return 0;
}
void insert(List
**p, void *data, unsigned int n)
{
List *temp;
int i;
/* Error check is
ignored */
temp =
malloc(sizeof(List));
temp->data =
malloc(n);
for (i = 0; i <
n; i++)
*(char
*)(temp->data + i) = *(char *)(data + i);
temp->next = *p;
*p = temp;
}
void print(List *p,
void (*f)(void *))
{
while (p)
{
(*f)(p->data);
p = p->next;
}
}
void printstr(void
*str)
{
printf("
\"%s\"", (char *)str);
}
void printint(void
*n)
{
printf(" %d",
*(int *)n);
}
void printchar(void
*c)
{
printf(" %c",
*(char *)c);
}
No comments:
Post a Comment