Witam!
Zaimplementowałem stos na liście jednokierunkowej, który potrzebny jest mi do obliczeń wyrażeń ONP.
struct LST {
double wartosc;
struct LST *nast;
};
typedef struct LST LISTA;
LISTA * push(double x, LISTA *n) {
LISTA *p = (LISTA *) malloc(sizeof(LISTA));
p->nast = n;
p->wartosc = x;
return p;
}
double pop (LISTA * n) {
double wart;
LISTA *temp;
wart = n->wartosc;
temp = n;
n = n->nast;
free(temp);
return wart;
}
Jednak zdejmowanie nie działa tak jak powinno. Prawdę mówiąc, w ogóle nie działa (debuger pokazuje, że to wina free(temp), a bez tego na stosie jest wciąż ta sama liczba). Wcześniej miałem stos zrobiony tak, że element był dodawany na koniec listy, i zdejmowanie polegało tylko na przypisaniu do odpowiedniego wskaźnika NULL. Jednak mój ćwiczeniowiec wymaga, by po ściągnięciu liczby ze stosu, pamięć została zwolniona. Bardzo proszę o pomoc, jutro muszę wysłać na maila gotowy już projekt, i jedynie tego mi brakuje.
Oto moje wcześniejsze funkcje push i pop:
LISTA * push(double x, LISTA *n) {
if (n->nast == NULL) {
LISTA *p = (LISTA *) malloc(sizeof(LISTA));
p->wartosc = x;
p->nast = n;
return p;
}
else {
n->nast = push(x, n->nast);
return n;
}
double pop (LISTA *n) {
double wart;
while (n->nast->nast != NULL)
n = n->nast;
wart = n->wartosc;
n->nast = NULL;
return wart;
}
Nie wiem, być może wymaga to dopisania jednej linijki, ale już siedzę nad tym projektem cały dzień i dalej nie działa.