Continuando a esercitarmi sulle liste ho modificato il codice precedente. Ancora una volta in compilazione non ho problemi ma quando poi eseguo mi restituisce un errore segmentation fault. Tuttavia non mi capacito di che cosa generi questo problema. Ecco il codice e grazie ancora...
codice:
#include <iostream>
using namespace std;
struct elem{
int inf;
elem* pun;
};
class list{
elem* p0;
public:
list();
//~list();
void initValueList(int, int);
void printList();
void pushHead(int);
bool popHead();
void pushFund(int);
bool popFund();
int findData(int);
int listSize();
list orderList();
list operator+ (list);
list operator[] (list);
};
list::list(){
p0=NULL;
}
void list::initValueList(int num=0, int value=0){
p0=NULL;
elem* p=p0;
for(int i=0; i<num; i++){
p=new elem;
p->inf=value;
p->pun=p0;
p0=p;
}
}
void list::printList(){
elem* p=p0;
if(p==NULL)
cout << "Empty List\n";
else{
while(p!=NULL){
cout << "'" << p->inf << "'->";
p=p->pun;
}
cout << "NULL\n";
}
}
void list::pushHead(int value){
elem* p=new elem;
p->inf=value;
p->pun=p0;
p0=p;
}
bool list::popHead(){
elem* p;
if(p0==NULL)
return false;
p=p0->pun;
p0=p;
delete p;
return true;
}
void list::pushFund(int value){
elem* p;
elem* q;
for(p=p0; p!=NULL; p=p->pun)
q=p;
p=new elem;
p->inf=value;
if(p0==NULL)
p0=p;
else
q->pun=p;
}
bool list::popFund(){
elem* p;
elem* q;
if(p0==NULL)
return false;
for(q=p0; q->pun!=NULL; q=q->pun)
p=q;
if(q==p0)
p0=NULL;
else
p->pun=NULL;
delete q;
return true;
}
int main(){
list l1;
l1.initValueList(3, 3);
l1.printList();
l1.pushHead(5);
l1.printList();
l1.pushFund(5);
l1.printList();
l1.popHead();
l1.printList();
l1.popFund();
l1.printList();
return 0;
}