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