Witam, oto mój kod: Pomysł na realizację listy stosów

#include <stdio.h>
#include <stdlib.h>
#define STACK_MAX 10

int SIZE=0;
       
struct LIST{
       int SIZE1;
       void *stack[STACK_MAX];
       struct LIST *next;
};
struct LIST *top;
// FUNKCJA ZWRACA WSKAZNIK DO AKTUALNEJ LISTY
void* CreateList(int stack_id)
{
 int list_declaration=SIZE-stack_id;
 int counter=stack_id;
 struct LIST* tmp;
 if(list_declaration < 0) // JESLI PODAMY LISTE ZADEKLAROWANA  
 {
  while(counter--)                      
  {
   top=top->next;                          
  }
  return top;      
 }
 else if(list_declaration == 0) // JESLI PODAMY PIERWSZA LISTE
 {
 //tmp=top->next;
 return tmp;
 }

 else // JESLI PODAMY LISTE KTORA NIE ZOSTALA ZDEFINIOWANA
 {
 while(list_declaration)
 {     
       struct LIST* tmp=(struct LIST*)malloc(sizeof(struct LIST));
       tmp->next=top;
       
 }
 //tmp=top->next;
 return tmp;
 }
}

//FUNKCJA DODAJACA ELEMENT STOSU DO WYBRANEJ LISTY(stack_id)
int push(int stack_id,void *tmp) 
{
    struct LIST *t = CreateList(stack_id);
        
        if(t->SIZE1 < STACK_MAX) 
        {
        t->stack[t->SIZE1] = tmp;
        t->SIZE1++;
        return 1;
        }
        else //overflow data
		{
             printf("Overflow data - STACK ID: %d",stack_id);
                return 0;
        }   
}
//FUNKCJA USUWAJACA ELEMENT STOSU Z WYBRANEJ LISTY (stack_id)
void *pop(int stack_id)
{
    struct LIST *t = CreateList(stack_id);
		if(t->SIZE1) 
        {
        t->SIZE1--;
        }
        return t->stack[t->SIZE1];
}
//FUNKCJA WYPISUJACA WIEKLOSC KONKRETNEGO STACKU(stack_id) LUB ZAWARTOSC WSZYSTKICH STWORZONYCH STACKOW DLA stack_id==0
void struct_size(int stack_id)
{ 
  if (stack_id==0)
  {
  while(top!=NULL)
  {
  int i=0;
  printf("STACK_ID:%d\n",++i);	
  top->next=top; 
  }
  
  while(top!=NULL)
  {
  printf("SIZE OF STACK:%d",top->SIZE1);
  }
  }
  else
  {
  	
  struct LIST *t = CreateList(stack_id);
  printf("STACK_ID:%d\n",stack_id);
  printf("SIZE OF STACK:%d",t->SIZE1);	
  }
}
int main()
{
    push(1,10);
    push(1,2);
    push(1,7);
    push(3,6);
    push(3,8);
    struct_size(1);
    struct_size(3);
    struct_size(2);
}

niestety nie chce działać a nie widzę gdzie robię błędy. Nie jestem pewien funkcji zwracajacej wskaznik do aktualnej listy
Proszę o pomoc i wytlumaczenie

Jeszcze jedno: jak chce zeby zmienna SIZE1(ta w strukturze) miala wartosc poczatkowa 0 to jak to zrobic ? bo jak wpisze SIZE1=0; to kompilator wywala bledy. Prosze o pomoc