Mam takie zadanie Napisz program, w którym zaimplementujesz jednokierunkową listę liniową za pomocą jednowymiarowej tablicy, na którą pamięć będzie przydzielana w sposób dynamiczny.
Nie wiem jak zrobic zeby ta pamięć była w sposób dynamiczny, próbowałam cos ale nie wychodzi.
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define LIST_SIZE 10
struct list_node
{
int elements[LIST_SIZE], first, last;
};
int add_one (int index)
{
return (index+1)%LIST_SIZE;
}
void make_empty(struct list_node *list)
{
list -> first = 0;
list -> last = LIST_SIZE - 1;
}
bool is_empty (struct list_node list)
{
return add_one(list.last) == list.first;
}
int first_one (struct list_node list)
{
if (is_empty(list) == true)
return -1;
else
return list.elements[list.first];
}
void add_to_list (struct list_node *list, int data)
{
if (add_one(add_one(list -> last)) != list -> first)
{
list -> last = add_one(list -> last);
list -> elements[list -> last] = data;
}
else
fprintf(stderr, "Lista jest pelna!\n");
}
void remove_from_list (struct list_node *list)
{
if ((is_empty(*list)) != false)
fprintf(stderr, "Lista jest pusta!\n");
else
list -> first = add_one(list -> first);
}
int main ()
{
struct list_node list;
make_empty(&list);
int *T;
T=(int*)malloc(10*sizeof(int));
int i=0, size=10;
if (T != NULL)
{
do{
do{
printf("Podaj liczbe: ");
scanf("%d", &T[i]);
i++;
add_to_list(&list, i);
if (i == size)
{
T =(int *)realloc(T, (size+10)*sizeof(int));
size+=10;
}
}while (add_one(add_one(list.last)) != list.first);
}while(T[i-1]);
}
while (!is_empty(list)){
printf("%3d", first_one(list));
remove_from_list(&list);
}
return 0;
}