Dlaczego ta funkcja do kasowania listy jednokierunkowej nie działa?
void destroy(stos **pierwszy){
if(*pierwszy!=NULL){
destroy(&(pierwszy->poprz));
}
}
Dlaczego ta funkcja do kasowania listy jednokierunkowej nie działa?
void destroy(stos **pierwszy){
if(*pierwszy!=NULL){
destroy(&(pierwszy->poprz));
}
}
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?
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 '->' ?)|
stos **pierwszy
to wskaźnik na wskaźnik, więc pierwszy->poprz
nie ma sensu.
to jak to zrobić?
&(*(pierwszy->poprz))
?
Ale co ty chcesz zrobić? Przecież ta funkcja nic nie robi. I wciąż nie wiemy jak wygląda struktura...
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ć
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');
}
&(*pierwszy)->poprz