#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node{
void *value;
unsigned index;
struct node *next;
}node;
typedef struct{
unsigned count;
node *head;
}list;
typedef struct{
char name[15];
}car;
typedef struct{
char name[10];
char surname[20];
}person;
void add(list *list, void *value){
node
* newNode
= (node
*)malloc(sizeof(node
)); newNode->value = value;
newNode->next = list->head;
newNode->index = list->count;
list->head = newNode;
list->count += 1;
}
void* get(list *list, unsigned index){
node* temp;
for(temp = list->head; temp != NULL; temp = temp->next)
if(temp->index == index) return temp->value;
return NULL;
}
void erase(list *list){
while(list->head){
node *next = list->head->next;
list->head = next;
}
}
void printPerson(const person* person){
printf("Selected Person:\nName: %s\nSurname: %s\n", person
->name
, person
->surname
); }
void printCar(const car* car){
printf("Selected Car:\nName: %s\n", car
->name
); }
int main(){
list list = { 0, NULL };
car
*cars
[] = { (car
*)malloc(sizeof(car
)), (car
*)malloc(sizeof(car
)) }; strcpy(cars
[0]->name
, "Mercedes"); strcpy(cars
[1]->name
, "Audi");
person
*persons
[] = { (person
*)malloc(sizeof(person
)), (person
*)malloc(sizeof(person
)) }; strcpy(persons
[0]->name
, "Grzegorz"); strcpy(persons
[0]->surname
, "Igrekowski"); strcpy(persons
[1]->name
, "Karolina"); strcpy(persons
[1]->surname
, "Iksinska");
unsigned i = 0;
for(; i < sizeof(cars) / sizeof(cars[0]); ++i) add(&list, cars[i]);
for(i = 0; i < sizeof(persons) / sizeof(persons[0]); ++i) add(&list, persons[i]);
printCar((car*)get(&list, 0));
printPerson((person*)get(&list, 2));
erase(&list);
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CiNpbmNsdWRlPHN0cmluZy5oPgoKdHlwZWRlZiBzdHJ1Y3Qgbm9kZXsKICAgIHZvaWQgKnZhbHVlOwogICAgdW5zaWduZWQgaW5kZXg7CiAgICBzdHJ1Y3Qgbm9kZSAqbmV4dDsKfW5vZGU7Cgp0eXBlZGVmIHN0cnVjdHsKICAgIHVuc2lnbmVkIGNvdW50OwogICAgbm9kZSAqaGVhZDsKfWxpc3Q7Cgp0eXBlZGVmIHN0cnVjdHsKICAgIGNoYXIgbmFtZVsxNV07Cn1jYXI7Cgp0eXBlZGVmIHN0cnVjdHsKICAgIGNoYXIgbmFtZVsxMF07CiAgICBjaGFyIHN1cm5hbWVbMjBdOwp9cGVyc29uOwoKdm9pZCBhZGQobGlzdCAqbGlzdCwgdm9pZCAqdmFsdWUpewogICAgbm9kZSogbmV3Tm9kZSA9IChub2RlKiltYWxsb2Moc2l6ZW9mKG5vZGUpKTsKICAgIG5ld05vZGUtPnZhbHVlID0gdmFsdWU7CiAgICBuZXdOb2RlLT5uZXh0ID0gbGlzdC0+aGVhZDsKICAgIG5ld05vZGUtPmluZGV4ID0gbGlzdC0+Y291bnQ7CgogICAgbGlzdC0+aGVhZCA9IG5ld05vZGU7CiAgICBsaXN0LT5jb3VudCArPSAxOwp9Cgp2b2lkKiBnZXQobGlzdCAqbGlzdCwgdW5zaWduZWQgaW5kZXgpewogICAgbm9kZSogdGVtcDsKICAgIGZvcih0ZW1wID0gbGlzdC0+aGVhZDsgdGVtcCAhPSBOVUxMOyB0ZW1wID0gdGVtcC0+bmV4dCkKICAgICAgICBpZih0ZW1wLT5pbmRleCA9PSBpbmRleCkgcmV0dXJuIHRlbXAtPnZhbHVlOwogICAgcmV0dXJuIE5VTEw7Cn0KCnZvaWQgZXJhc2UobGlzdCAqbGlzdCl7CiAgICB3aGlsZShsaXN0LT5oZWFkKXsKICAgICAgICBub2RlICpuZXh0ID0gbGlzdC0+aGVhZC0+bmV4dDsKICAgICAgICBmcmVlKGxpc3QtPmhlYWQtPnZhbHVlKTsKICAgICAgICBmcmVlKGxpc3QtPmhlYWQpOwogICAgICAgIGxpc3QtPmhlYWQgPSBuZXh0OwogICAgfQp9Cgp2b2lkIHByaW50UGVyc29uKGNvbnN0IHBlcnNvbiogcGVyc29uKXsKICAgIHByaW50ZigiU2VsZWN0ZWQgUGVyc29uOlxuTmFtZTogJXNcblN1cm5hbWU6ICVzXG4iLCBwZXJzb24tPm5hbWUsIHBlcnNvbi0+c3VybmFtZSk7Cn0KCnZvaWQgcHJpbnRDYXIoY29uc3QgY2FyKiBjYXIpewogICAgcHJpbnRmKCJTZWxlY3RlZCBDYXI6XG5OYW1lOiAlc1xuIiwgY2FyLT5uYW1lKTsKfQoKaW50IG1haW4oKXsKICAgIGxpc3QgbGlzdCA9IHsgMCwgTlVMTCB9OwogICAgY2FyICpjYXJzW10gPSB7IChjYXIqKW1hbGxvYyhzaXplb2YoY2FyKSksIChjYXIqKW1hbGxvYyhzaXplb2YoY2FyKSkgfTsKICAgIHN0cmNweShjYXJzWzBdLT5uYW1lLCAiTWVyY2VkZXMiKTsKICAgIHN0cmNweShjYXJzWzFdLT5uYW1lLCAiQXVkaSIpOwoKICAgIHBlcnNvbiAqcGVyc29uc1tdID0geyAocGVyc29uKiltYWxsb2Moc2l6ZW9mKHBlcnNvbikpLCAocGVyc29uKiltYWxsb2Moc2l6ZW9mKHBlcnNvbikpIH07CiAgICBzdHJjcHkocGVyc29uc1swXS0+bmFtZSwgIkdyemVnb3J6Iik7CiAgICBzdHJjcHkocGVyc29uc1swXS0+c3VybmFtZSwgIklncmVrb3dza2kiKTsKICAgIHN0cmNweShwZXJzb25zWzFdLT5uYW1lLCAiS2Fyb2xpbmEiKTsKICAgIHN0cmNweShwZXJzb25zWzFdLT5zdXJuYW1lLCAiSWtzaW5za2EiKTsKCiAgICB1bnNpZ25lZCBpID0gMDsKICAgIGZvcig7IGkgPCBzaXplb2YoY2FycykgLyBzaXplb2YoY2Fyc1swXSk7ICsraSkgYWRkKCZsaXN0LCBjYXJzW2ldKTsKICAgIGZvcihpID0gMDsgaSA8IHNpemVvZihwZXJzb25zKSAvIHNpemVvZihwZXJzb25zWzBdKTsgKytpKSBhZGQoJmxpc3QsIHBlcnNvbnNbaV0pOwoKICAgIHByaW50Q2FyKChjYXIqKWdldCgmbGlzdCwgMCkpOwogICAgcHJpbnRQZXJzb24oKHBlcnNvbiopZ2V0KCZsaXN0LCAyKSk7CiAgICBlcmFzZSgmbGlzdCk7CgogICAgcmV0dXJuIDA7Cn0K