ADT Queue durch Stack realiseren

Dolphon

Erfahrenes Mitglied
Hi,

ich soll eine ADT Queue durch einen Stack realisiseren. Damit dies funktionieren kann, werden 2 Stacks benötigt.

Hier meine Klasse für den Stack:

C++:
class adtstack{

private:

struct stack{
        int A[100];
        int Atop;
};
struct stack S;

public:

void CREATE(){
 S.Atop = -1;
}
bool EMPTY(){
 if (S.Atop == -1)
    return true;
 else
    return false;
}
void PUSH(char x){
 if (S.Atop == 100)
   cerr << "overflow" << endl;
 else {
   S.Atop = S.Atop+1;
   S.A[S.Atop] = x;
 }
}

void POP(){
 if (!EMPTY())
 {
      S.Atop = S.Atop-1;
      return;
 }
 cerr << "underflow" << endl;
 return;
}

int TOP(){
 if (!EMPTY())
      return S.A[S.Atop];
 cerr << "underflow" << endl;
 return -1;
}


};

Nach außen hin, soll sich die Queue ganz normal verhalten. Damit dies gegeben ist, hab ich die Klasse adtqueue angelegt:

C++:
class adtqueue{

private:

public:

void CREATE() // legt neue queue an
	{	

	}
	bool EMPTY() // sagt ob die Q leer ist
	{
		
	}
	void ENQ(int x)//hängt eine neues Element in die queue
	{
		
	}
	void DEQ() // löscht das erste Element der Queue
	{
		
	}

	int FRONT()// liefert das erste Element der Queue
	{
	
	}

};

Wie die einzelnen Methoden der Queue nun arbeiten müssen, habe ich schriftlich auf einen Zettel.
Ich weiß allerdings nicht genau, was in den private Teil und in die Mehtode "Create" hineingeschrieben werden muss..

Letztendlich muss da irgendwas stehen wie

C++:
adtstack S1;
adtstack S2;
 
Zuletzt bearbeitet von einem Moderator:
Hi.

Die CREATE Methode sollte doch wohl ein Standard-Konstruktor sein, oder? Dann solltest du es so schreiben:
C++:
class adtstack {
public:
  adtstack() : S.ATop(-1) {}
Der Standardkonstruktor wird automatisch aufgerufen, d.h. du brauchst in dem Konstruktor der Queue gar nichts aufrufen.

Gruß
 
Hi,

ich muss allerdings in der Klasse "Queue" 2 Stacks/Objekte erzeugen, damit ich die Queue Methoden realisieren kann.
Wie ich dieses erzeugen in der Klasse Queue realisiere weiß ich nicht.
 
so leicht ist das leider nur nicht.
Weil so klappt es z.B nicht:

C++:
class adtqueue{

private:

public:

	adtqueue() {
	adtstack S1;
	adtstack S2;
	}


	bool EMPTY() // sagt ob die Q leer ist
	{
		if(S1.EMPTY() && S2.EMPTY() == true)
			return true;
		else
			return false;
	}........
 
Zuletzt bearbeitet von einem Moderator:
so leicht ist das leider nur nicht.
Weil so klappt es z.B nicht:
So war das ja auch nicht gemeint. Du mußt die Stacks als Attribute der Klasse defininieren und nicht bloß als lokale Variablen im Konstruktor:
C++:
class adtqueue{

private:
	adtstack S1;
	adtstack S2;
Übrigens, sowas hier:
C++:
		if(S1.EMPTY() && S2.EMPTY() == true)
			return true;
		else
			return false;
	}
wird allgemein als schlechter Stil empfunden. Wozu die if Abfrage? Und wozu der Vergleich mit true? Ist doch nur ganz einfache boolsche Logik:
C++:
return (S1.EMPTY() && S2.EMPTY());
Gruß
 
Zuletzt bearbeitet von einem Moderator:
Zurück