Kasowanie listy jednokierunkowej nie działa prawidłowo

0

Dlaczego ta funkcja do kasowania listy jednokierunkowej nie działa?

void destroy(stos **pierwszy){
    if(*pierwszy!=NULL){
        destroy(&(pierwszy->poprz));
    }
}
1

https://dsp.krzaq.cc/post/445/jak-zadawac-pytania-na-forum/

Co znaczy "nie działa"?
Skąd mamy wiedzieć, skoro nie pokazałeś nam jak wygląda lista?
To się w ogóle kompiluje?

0

nie kompiluje się, pojawia sie taki błąd
C:\Users\Kamil\Desktop\Projekt\stos\main.cpp|26|error: request for member 'poprz' in '* pierwszy', which is of pointer type 'stos*' (maybe you meant to use '->' ?)|

0

stos **pierwszy to wskaźnik na wskaźnik, więc pierwszy->poprz nie ma sensu.

0

to jak to zrobić?

&(*(pierwszy->poprz))

?

0

Ale co ty chcesz zrobić? Przecież ta funkcja nic nie robi. I wciąż nie wiemy jak wygląda struktura...

0

aa trochę źle przepisałem, powinno być

void destroy(stos **pierwszy){
    if(*pierwszy!=NULL){
        destroy(&*pierwszy->poprz);
    delete(*pierwszy);
    }
}

nie wiem co w wywołaniu wpisać

0

proszę tutaj cały program, ale pewnie bedzie ciężko się połapał

#include <iostream>


using namespace std;

struct stos{
	int liczba;
	stos *poprz;
};
void pushh(stos **pierwszy){ //dodanie liczb na stos
	stos *drugi=new stos;
	cout<<"Podaj liczbę do wrzucenia na stos"<<endl;
	cin>>drugi->liczba;
	drugi->poprz=*pierwszy;
	*pierwszy=drugi;
}
int emptyy(stos **pierwszy){ // sprawdzenie czy stos jest pusty
    if(*pierwszy==NULL){
        return 1;
    }
    return 0;
}

void destroy(stos **pierwszy){ //kasowanie stosu
    if(*pierwszy!=NULL){
        destroy(&*pierwszy->poprz);
    delete(*pierwszy);
    }
}


int main(int argc, char** argv) {
	stos *pierwszy= NULL;
	int l,licznik=0;
	int wybor=0;
	int sum=0;
	stos *pom;
	char zak=0;
	stos *pierwszy1;


	do{
        cout<<"Co chcesz zrobić? "<<endl;
        cin>>wybor;
	if(wybor==1){ //menu programu
            if(licznik==0){
                pierwszy = new stos;
                licznik++;
            }
    cout<<"Ile liczb chcesz wrzucić na stos?"<<endl;
	cin>>l; //dodanie nowego elementu na stos
	for(int i=0;i<l;i++){
	pushh(&pierwszy);
	pierwszy1=pierwszy;
}
        pom=pierwszy;
        sum+=l;
	for(int i=0;i<sum;i++){
	cout<<endl<<pierwszy1->liczba<<endl;
	pierwszy1=pierwszy1->poprz;
}
    pierwszy=pom;}
    if(wybor==5){
        int a=emptyy(&pierwszy);
        if(a==1)cout<<"Stos pusty"<<endl;
        else cout<<"Stos niepusty"<<endl;
    }
    cout<<"Zakonczyc program(T-tak/N-nie)"<<endl;
    cin>>zak;
	}while(zak!='T');
}

1

&(*pierwszy)->poprz

1 użytkowników online, w tym zalogowanych: 0, gości: 1