Witam, mam za zadanie napisać strukturę ze stosem oraz funkcje obsługujące go czyli pop (zdjęcie elementu ze stosu) oraz push ( umieszczenie elementu na stosie). Przejrzałem pokaźną liczbę materiałów, jednak mam wrażenie, że to jeden z najgorzej dla kogoś początkującego wytłumaczonych tematów w tym języku. Albo też tylko ja nie rozumiem tego : P Po próbnych wywołaniach, teoretycznie wszystko się kompiluje, funkcje nie powodują przy używaniu błędów ale np po użyciu push, dodaje sobie elementy, jednak zarówno pop jak i print nie widzą efektu i wybijają, że stos jest pusty :c
Reasumując, gdyby ktoś mógł poprawić te funkcje i wyjaśnić łopatologicznie co co robi i dlaczego będę niezmiernie wdzięczny.
Na początek jak wygląda u mnie struktura dla stosu:
typedef struct wezel{
int liczba;
struct wezel *nast;
}wezel;
No i funkcje:
/*funkcja umieszczająca element na szczycie stosu*/
wezel *push(wezel *stos, int element){
wezel* biezacy;
if((biezacy=(wezel*)malloc(sizeof(wezel)))==NULL)
return stos;
else{
biezacy->liczba=element;
biezacy->nast=stos;
stos=biezacy;
}
return stos;
}
/*funkcja zdejmująca element ze szczytu stosu*/
wezel *pop(wezel *stos,int element){
wezel *tmp;
if(stos!=NULL){
tmp=stos;
element=tmp->liczba;
stos=tmp->nast;
free(tmp);
return stos;
}
else{
fprintf(stderr,"Błąd brak danych\n");
return stos ;}
}
Oraz wyświetlanie stosu:
/*funkcja drukująca na stdout cały stos- wstawiam na wszelki wypadek, bo może tu jest problem*/
void print(wezel *stos){
if(stos==NULL)
printf("Brak elementów\n");
else
do{
printf("%5d\n",stos->liczba);
stos=stos->nast;
}while (stos!=NULL);
}
Bonusowo załączam jak wyglądają u mnie wywołania tych funkcji w mainie:
print(stos);
push(stos,element);
pop(stos,element);
Pozdrawiam, draggie.