Problema visualizzazione MultiLista...C++

di il
5 risposte

Problema visualizzazione MultiLista...C++

Salve ragazzi, ho un grosso problema nella visualizzazione di lista è da due giorni che ci combatto, mi potreste dire quale sia l'errore?
#include<iostream>
using namespace std;

template<class H> class Nodo {
	private:
		H key;
		Nodo<H>* next;
	
	public:
		Nodo(H k){
			key = k;
			next = NULL;
		}
		
		void setKey(H key){
			this->key = key;
		}
		
		void setNext(Nodo<H>* next){
			this->next = next;
		}
		
		H getKey() const {
			return key;
		}
		
		Nodo<H>* getNext() const{
			return next;
		}

};

template<class H> class List{
	private:
		int n;
		Nodo<H>* head;
	
	public:
		List(){
			n = 0;
			head = NULL;
		}
		
		List<H>* insert(H x){
			Nodo<H>* prev = NULL;
			Nodo<H>* i = head;
			
			while(i != NULL)
			{
				prev = i;
				i = i->getNext();
			}
			
			Nodo<H>* nd = new Nodo<H>(x);
			
			if(prev == NULL)
				head = nd;
			else
				prev->setNext(nd);
			
			nd->setNext(i);
			
			n++;
			return this;
		}
		
		Nodo<H>* getHead() const {
			return head;
		}
		
		friend ostream& operator<<(ostream& stream, const List<H>*& l){
			List<H>* l1 = l;
			
			Nodo<H>* tmp = l1.getHead();
			while(tmp != NULL)
				{
					stream << tmp->getKey() << " ";
					tmp = tmp->getNext();
				}
			
			return stream;
		}

};

template<class H> class MultiList : public List< List<H> >{
	private:
		List< List<H> >* ml;
	
	public:
		MultiList(){
			ml = new List< List<H> >();
		}
		
		MultiList<H> *insert(H x){
			Nodo< List<H> >* tmp = ml->getHead();
			
			if(!tmp)
			{
				List<H> aux;
				aux.insert(4);
				ml->insert(aux);
			}
			
			tmp = tmp->getNext();
			
			return this;
		}
		
		void print(){
			Nodo< List<H> >* tmp = ml->getHead();
			
			while(tmp != NULL)
			{
				cout << tmp->getKey();
				tmp = tmp->getNext();
			}
		}

};


int main(){
	MultiList<int>* l = new MultiList<int>();
	l->insert(5)->insert(4)->insert(7)->insert(6)->print();
}
il concetto l'ho capito, ma non capisco perchè mi da errore nella ridefinizione dell'operatore <<, nel void print di MultiList... cout << tmp->getKey();
anche se nella classe list definisco ciò che deve fare... @oregon

5 Risposte

  • Re: Problema visualizzazione MultiLista...C++

    Ok sono riuscito a risolvere il problema, ma non è finita qui, perchè non mi visualizza nulla! qualcuno che mi aiuti vi prego...
    #include<iostream>
    using namespace std;
    
    template<class H> class Nodo{
    	private:
    		H key;
    		Nodo<H>* next;
    		
    	public:
    		Nodo(H x) : key(x), next(NULL){
    			
    		}	
    		
    		void setKey(H x){
    			key = x;
    		}
    		
    		void setNext(Nodo<H>* next){
    			this->next = next;
    		}
    		
    		Nodo<H>* getNext(){
    			return next;
    		}
    		
    		H getKey(){
    			return key;
    		}
    		
    		H* getPtrKey(){
    			return &key;	
    		}
    	
    };
    
    template<class H> class List{
    	private:
    		int n;
    		Nodo<H>* head;
    	
    	public:
    		List(){
    			head = NULL;
    			n = 0;
    		}
    		
    		List<H>* insert(H x){
    			Nodo<H>* prev = NULL;
    			Nodo<H>* i = head;
    			
    			while(i != NULL)
    			{
    				prev = i;
    				i = i->getNext();
    			}
    			
    			Nodo<H>* nd = new Nodo<H>(x);
    			n++;
    			
    			if (prev == NULL)
    				head = nd;
    			else
    				prev->setNext(nd);
    			
    			nd->setNext(i);			
    			
    			return this;
    		}
    		
    		List<H>* del(H x){
    			Nodo<H>* prev = NULL;
    			Nodo<H>* i = head;
    			
    			while(i != NULL && i->getKey() != x )
    			{
    				prev = i;
    				i = i->getNext();
    			}
    			
    			if( i == NULL ) return this;
    			
    			if( prev == NULL )
    				head = head->getNext();
    			else
    				prev->setNext(i->getNext());
    				
    			n--;
    			return this;
    		}
    
    		void _removehead(){
    			if( head != NULL ){
    				Nodo<H>* succ = head->getNext();
    				delete head;
    				head = succ;
    			}
    		}
    		
    		Nodo<H>* getHead() const{
    			return head;
    		}
    		
    		void print(){
    			Nodo<H>* tmp = head;
    			while( tmp != NULL ){
    				cout << tmp->getKey() << " ";
    				tmp = tmp->getNext();
    			}  
    			cout << endl;
    		}
    		
    		friend ostream& operator<<(ostream& stream, const List<H>& l)
    		{
    			Nodo<H>* tmp = l.getHead();
    			while(tmp != NULL){
    				stream << tmp->getKey() << " ";
    				tmp = tmp->getNext();
    			}
    			
    			return stream;
    		}
    };
    
    template<class H> class MultiList{
    	private:
    		List< List<H> >* l;
    	
    	public:
    		MultiList(){
    			l = new List< List<H> >();
    		}
    		
    		MultiList<H>* insert(H x){
    			Nodo< List<H> >* head = l->getHead();
    			
    			if(head)
    			{
    				if( x%2 == 0)
    					head->getPtrKey()->insert(x);
    				else
    				{
    					List <H> aux;
    					aux.insert(x);
    					l->insert(aux);
    				}
    			}
    			
    			return this;
    		}
    		
    		void print(){
    			Nodo< List<H> >* tmp = l->getHead();
    			while(tmp != NULL){
    				cout << tmp->getKey() << " ";
    				tmp = tmp->getNext();
    			}
    		}
    		
    
    };
    
    int main(){
    	List<int>* SingleList = new List<int>();
    	SingleList->insert(4)->insert(5)->insert(1)->insert(7)->print();
    	SingleList->del(4)->print();
    	
    	MultiList<int>* DoubleList = new MultiList<int>();
    	DoubleList->insert(2)->insert(4)->insert(21)->insert(30)->insert(70)->insert(10);
    	DoubleList->print();
    	
    	
    }
  • Re: Problema visualizzazione MultiLista...C++

    Non ti visualizza nulla nel senso che il programma si avvia e termina senza dare alcun output o non termina proprio?
  • Re: Problema visualizzazione MultiLista...C++

    Esattamente si avvia ma non da alcun output, mi sono accorto che quando eseguo:
    Nodo< List<H> >* tmp = l.getHead() , questa funzione mi restituisce NULL, come se non avesse creato nulla della mia multilista.. come se non esistesse un head di partenza con un primo nodo collegato... @BlackHat
  • Re: Problema visualizzazione MultiLista...C++

    Ho provato ad eseguire il tuo programma e la SingleList me la stampa senza problemi, anche la parte in cui viene eliminato 4.

    Purtroppo provengo da C quindi posso aiutarti solo in maniera concettuale anche se qualcosa capisco.
  • Re: Problema visualizzazione MultiLista...C++

    RISOLTO, la notte fa bene
Devi accedere o registrarti per scrivere nel forum
5 risposte