<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Hilfe Sequentielle Warteschlangen]]></title><description><![CDATA[<p>hey,<br />
möchte eine Warteschlange (queue) erstellen und dazu die sequentielle Implementierung nutzen. außerdem soll die Queue als Ringpuffer dargestellt werden.<br />
zudem soll der benutzer entscheiden für wieviele elemente er die queque anlegen will.</p>
<p>mein code sieht bis jetzt so aus:<br />
queue.h</p>
<pre><code>#pragma once
using namespace std;

class queue{
private:
	int n=0, groesse; //n ist anzahl an elementen in liste
                          //groesse ist MAXIMALE anzahl
	int L=n-1, S=0;  //als start vorgegeben
	int *Data ;

public:
	queue();
	~queue();
	void hinten_einfuegen(int wert);
	void vorne_entfernen();
	void ausgabe();
};
</code></pre>
<p>queue.cpp</p>
<pre><code>#pragma once
#include &quot;queue.h&quot;
#include &lt;iostream&gt;
using namespace std;

queue::queue()
{
	cout &lt;&lt; &quot;Wieviele Elemente soll die Queue aufnehmen koennen? &quot;;
	cin &gt;&gt; groesse;
	Data = new int[groesse];

	for (int i = 0; i &lt; groesse; i++)
	{
		hinten_einfuegen(i+1);
	}
};

queue::~queue(){};

void queue::hinten_einfuegen(int wert)
{
	if (n == groesse)
		cout &lt;&lt; &quot;Queue ist voll! Element konnte nicht eingefuegt werden.&quot; &lt;&lt; endl;
	else
	{
		Data[S] = wert; //Wert an Schreibposition einfuegen
		S = S + 1; //Schreibposition erhöhen
		n = n + 1; //Anzahl an Elementen in Queue erhöhen
		cout &lt;&lt; &quot;Wert wurde erfolgreich eingefuegt!&quot; &lt;&lt; endl;	

		if (groesse == S) //Queque komplett gefüllt 
		{
			S = 0;
		}
	}
};

void queue::vorne_entfernen()
{
	if (n==0)/*prüfung ob die queue leer ist nach vorlage: (L + 1) mod n = S
-&gt; jedoch kam dann die fehlermeldung, dass keine division mit divisior null funktioniert!
ich bin mir aber auch nicht sicher ob in dieser prüfung das n logisch zu dem n was ich beschrieben habe passt!  */
	{
		cout &lt;&lt; &quot;Die Queue ist leer! Entnehmen nicht moeglich.&quot; &lt;&lt; endl;
	}
	else //statt vorne in der Schlange das Element zu entfernen 
             //wird das letzte entfernt (1234 -&gt; 123 (statt 234))
             //Fehler????
	{
		L = L + 1;
		n = n - 1;

		if (n == 0) //NULL elemente noch in liste
		{
			L = n - 1;
			S = 0;
		}
	}
};

void queue::ausgabe()
{
	cout &lt;&lt; &quot;Inhalt der Queue: &quot;;

	for (int i = 0; i &lt; n; i++)
		cout &lt;&lt; Data[i] &lt;&lt; &quot; &quot; ;

};
</code></pre>
<p>schonmal großen dank an helfende.<br />
tipps/vorschläge etc. bitte für laien &quot;über&quot;-verständich formulieren.<br />
bitte EXPLIZITE anmerkungen (welche zeile) wo mein programm nicht zu den vorgaben passt (z.B dass die queue ein ringpuffer ist) falls dies der fall ist</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/332311/hilfe-sequentielle-warteschlangen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 09:33:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/332311.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 21 Apr 2015 16:44:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Hilfe Sequentielle Warteschlangen on Tue, 21 Apr 2015 16:47:35 GMT]]></title><description><![CDATA[<p>hey,<br />
möchte eine Warteschlange (queue) erstellen und dazu die sequentielle Implementierung nutzen. außerdem soll die Queue als Ringpuffer dargestellt werden.<br />
zudem soll der benutzer entscheiden für wieviele elemente er die queque anlegen will.</p>
<p>mein code sieht bis jetzt so aus:<br />
queue.h</p>
<pre><code>#pragma once
using namespace std;

class queue{
private:
	int n=0, groesse; //n ist anzahl an elementen in liste
                          //groesse ist MAXIMALE anzahl
	int L=n-1, S=0;  //als start vorgegeben
	int *Data ;

public:
	queue();
	~queue();
	void hinten_einfuegen(int wert);
	void vorne_entfernen();
	void ausgabe();
};
</code></pre>
<p>queue.cpp</p>
<pre><code>#pragma once
#include &quot;queue.h&quot;
#include &lt;iostream&gt;
using namespace std;

queue::queue()
{
	cout &lt;&lt; &quot;Wieviele Elemente soll die Queue aufnehmen koennen? &quot;;
	cin &gt;&gt; groesse;
	Data = new int[groesse];

	for (int i = 0; i &lt; groesse; i++)
	{
		hinten_einfuegen(i+1);
	}
};

queue::~queue(){};

void queue::hinten_einfuegen(int wert)
{
	if (n == groesse)
		cout &lt;&lt; &quot;Queue ist voll! Element konnte nicht eingefuegt werden.&quot; &lt;&lt; endl;
	else
	{
		Data[S] = wert; //Wert an Schreibposition einfuegen
		S = S + 1; //Schreibposition erhöhen
		n = n + 1; //Anzahl an Elementen in Queue erhöhen
		cout &lt;&lt; &quot;Wert wurde erfolgreich eingefuegt!&quot; &lt;&lt; endl;	

		if (groesse == S) //Queque komplett gefüllt 
		{
			S = 0;
		}
	}
};

void queue::vorne_entfernen()
{
	if (n==0)/*prüfung ob die queue leer ist nach vorlage: (L + 1) mod n = S
-&gt; jedoch kam dann die fehlermeldung, dass keine division mit divisior null funktioniert!
ich bin mir aber auch nicht sicher ob in dieser prüfung das n logisch zu dem n was ich beschrieben habe passt!  */
	{
		cout &lt;&lt; &quot;Die Queue ist leer! Entnehmen nicht moeglich.&quot; &lt;&lt; endl;
	}
	else //statt vorne in der Schlange das Element zu entfernen 
             //wird das letzte entfernt (1234 -&gt; 123 (statt 234))
             //Fehler????
	{
		L = L + 1;
		n = n - 1;

		if (n == 0) //NULL elemente noch in liste
		{
			L = n - 1;
			S = 0;
		}
	}
};

void queue::ausgabe()
{
	cout &lt;&lt; &quot;Inhalt der Queue: &quot;;

	for (int i = 0; i &lt; n; i++)
		cout &lt;&lt; Data[i] &lt;&lt; &quot; &quot; ;

};
</code></pre>
<p>schonmal großen dank an helfende.<br />
tipps/vorschläge etc. bitte für laien &quot;über&quot;-verständich formulieren.<br />
bitte EXPLIZITE anmerkungen (welche zeile) wo mein programm nicht zu den vorgaben passt (z.B dass die queue ein ringpuffer ist) falls dies der fall ist</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2451091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2451091</guid><dc:creator><![CDATA[Dangling]]></dc:creator><pubDate>Tue, 21 Apr 2015 16:47:35 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe Sequentielle Warteschlangen on Tue, 21 Apr 2015 18:47:56 GMT]]></title><description><![CDATA[<ul>
<li>
<pre><code></code></pre>
</li>
</ul>
<p>int n=0, groesse; //n ist anzahl an elementen in liste<br />
//groesse ist MAXIMALE anzahl<br />
int L=n-1, S=0;  //als start vorgegeben</p>
<pre><code>
Das passt bereits nicht. L fängt ja bei -1 an! Siehe auch dein anderer Thread. Wieso musst du überhaupt die Anzahl der Elemente kennen?
*  Nutzerinteraktion hat nichts im Konstruktor eines Ringpuffers zu suchen!
*  Wenn du denkst, einen nutzerdefinierten Destruktor zu brauchen, wieso ist er dann leer? (Du brauchst hier übrigens einen nutzerdefinierten Destruktor und der sollte nicht leer sein!)
*  Wenn du einen nutzerdefinierten Destruktor brauchst, brauchst du mit fast 100% Wahrscheinlichkeit auch noch mindestens einen nutzerdefnierten Kopierkonstruktor und nutzerdefnierten Zuwesiungsoperator.
*  Wenn deine Queue nicht selber Ressourcen verwalten würde (ist das wirklich Kernaufgabe einer Queue?) sondern dies an darauf spezialisierte Klassen auslagern würde (z.B. std::vector oder std::array oder zur Not auch ein rohes Array), würden die beiden vorherigen Punkte entfallen, weil du keine nutzerdefnierten Versionen der erwähnten Funktionen mehr bräuchtest.
*  Nutzerinteraktion hat auch nichts in irgendwelchen anderen Funktionen einer Queue zu suchen.
*  Deine Rechnungen zu Schreibe- und Leseposition sind allesamt ganz großer Mist. Und damit meine ich nicht nur dein Problem mit der Bedeutung von n.

Die technischen Fehler sind ja behebbar, aber der letzte Punkt ist ein vernichtendes Urteil. Du scheinst nicht verstanden zu haben, was hier überhaupt die Aufgabe ist.</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2451122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2451122</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 21 Apr 2015 18:47:56 GMT</pubDate></item></channel></rss>