Ablagen Programm

Krikus

Mitglied
Hi,

ich habe hier ein Programm geschrieben, was mir ein Ablage erzeugt.
Ich habe bildlich gesprochen ein Blattpapier, das in 2 Teile unterteilt ist. Im ersten Teil stehen die Infos, im zweiten Teil ist der Zeiger auf das nächste Blatt.
Nun möchte ich durch die Funktion copy, ablage1 in ablage2 kopieren.
Die Reihenfolge der Infos, soll dabei einmal egal sein.
Allerdings komme ich da nicht so ganz weiter, da ich auch nicht weiß, wie ich die neue Ablage, ablage 2 zuordnen kann etc.

Hier einmal der Code:

PHP:
#include <iostream>
#include <conio.h>
using namespace std;

class ablage{

private:

	struct knoten{
					int info;
					struct knoten *next;
				};

	
			int cnt; // zählzt die Knoten
			struct knoten *oben; // Zeiger auf das oberste Element

public:
		ablage()
		{
			cnt=0;
			oben=NULL;
		}

		void drauflegen(int x) 
		{
		   struct knoten *p = new knoten;  // erzeuge neuen Knoten
		   p->info = x;    // Infowert wird x
		   p->next = oben; // next-Wert wird initialisiert mit Positionszeiger
						   // es wird also VOR dem aktuellen Element engefügt
		   oben = p;       // Positionszeiger zeigt nun auf das neue Element
		   cnt++;          // Zähler erhöhen
		}

		void runternehmen() 
		{
		   struct knoten * help; // Merken des Nachfolgers des Positionszeigers
		   if (cnt == 0)  // Nur sinnvoll, wenn es mindestens ein Element gibt
				help = NULL;
		   else 
			{
				help = oben-> next;
				cnt--;          // Zähler veringern
			}
		   delete oben;       // Speicher aufräumen
		   oben = help;       // Positionszeiger wird ehemaliger Nachfolger
		}


		int top()
		{

		struct knoten *p = oben;
		int i=0,test;
		while (p!=NULL)
		{
			if (i=cnt)
			{
			test = p->info;
			}
			p=p->next;
		}
		return test;
	
		}


		void copy()
		{
			struct knoten *p = oben;
			//struct knoten *q = new knoten;  // erzeuge neuen Knoten
			while (p!=NULL)
			{
				
				drauflegen(p->info);   
			
				p=p->next;
			}

		}

};


int _tmain(int argc, _TCHAR* argv[])
{
	ablage ablage1;
	int eingabe;
	cout << "Geben Sie 5 Zahlen ein.\n"<<endl;
	for (int i=0;i<5;i++)
	{
		cin >> eingabe;
		ablage1.drauflegen(eingabe);
	}

	cout << "Das oberste Element ist: " << ablage1.top()<< endl;
	
	ablage ablage2;
	ablage2.copy();
	/cout << "Das oberste Element ist: " << ablage2.top()<< endl;

	getch();
	return 0;
}
 
Hm also unter C++ sind struct nicht viel anders wie class ;)

C++:
class ablage
{
private:
    struct knoten
	{
		int info;
		knoten* weiter;

		explicit knoten(const int info, knoten* weiter = NULL)
			: info(info), weiter(weiter)
		{}
	};

    
	std::size_t anzahl;
	knoten* oben;

public:
	ablage()
		: anzahl(0), oben(NULL)
	{}

public:
	void drauflegen(const int x) 
	{
		// neuen knoten anlegen und nachfolgeknoten auf aktuell obersten setzen
		oben = new knoten(x, oben);
		++anzahl;
	}

	void runternehmen() 
	{
		// kann etwas runtergenommen werden?
		if (oben == NULL) return;

		// nachfolgender knoten soll nachrücken
		knoten* weiter = oben->weiter;
		// obersten knoten löschen
		delete oben;
		oben = weiter;
		
		--anzahl;
	}

	int ende()
	{
		if (oben == NULL) return 0; // FEHLER!

		// Durchgehen bis zum letzten Knoten
		knoten* it = oben;
		while (it->weiter) it = it->weiter;

		// Wert des letzten Knotens zurückgeben
		return it->info;
	}

	int anfang()
	{
		if (oben == NULL) return 0; // FEHLER!
		// Wert des ersten Knotens zurückgeben
		return oben->info;
	}
};
so damit erstmal paar Fehler aus deinem alten Code rausgemacht ;) Dann ehm muss du beim Kopieren erstmal ein Objekt haben dessen Werte du kopieren willst!
 
Vielen Dank für deien Fehlerbereinigung.

In der main erzeuge ich mir ein Objekt ablage1 und fülle dies mit Werten.
Anschließend erzeuge ich noch ein ein Objekt ablage2, wo die Werte hineinkopiert werden sollen.

Jetzt muss in irgendeienr Form die Methode copy aufgerufen werden. Diese Methode ruf so oft die Methode drauflegen mit dem Parameter info auf, wie Knoten in ablage 1 sind.
So weit mein Gedankge zu der Methode copy.

Aber wie kann ich die beiden Objekte auseinander halten, bzw wie weiß die Methode, das die Werte in ablage 2 kopiert werden sollen.
 
Nja dein Problem ist, dass du die liste theoretisch von hinten nach vorne durchgehen musst, du aber bei deinem element immer nur den folge knoten dir merkst ;)
 
Zurück