<?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[Elemente verkehrt auf Queue geschoben]]></title><description><![CDATA[<p>Hi ich hab ein Programm geschrieben wo Int-Werte aus einer Datei auf ein Queue geschoben werden und danach per Bucketsort wieder sortiert in eine neue Datei ausgibt.Aber mein Programm schiebt die Elemente Verkehrt auf den Queue.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;

using namespace std;

#ifndef _QUEUE_H
#define _QUEUE_H

template &lt;class T&gt;
class Queue
{
public:
	Queue(): counter(0), topp (0){}		//Konstruktor
	~Queue(){}				//Destruktor

//Funktionsprototypen

	void deque();		//löschen des ersten Elements
	bool enque(const T&amp;);	//einfügen eines Elements ans Ende

	T&amp; first()const;		//Zugriff auf das erste Element
	bool isEmpty()const;		//Test ob Queue leer ist

private:
			class qNode
				{
				public:
				T data;
				qNode *next_element;
				};	

			qNode *topp;		//Zeiger auf erstes Element
			int counter;		//zählt wie viel elemente in Queue

};

//Funktionen

//prüft ob Queue leer ist, 0 Queue ist nicht leer und 1 Queue ist leer
template &lt;class T&gt; bool Queue&lt;T&gt;::isEmpty()const
	{
	if(counter == 0)
	return true;
	else
	return false;
	}	

//fügt Element am Ende an
template &lt;class T&gt; bool Queue&lt;T&gt;::enque(const T&amp; einzufuegendes_element)
{
	qNode *node = new qNode;
	node-&gt;data = einzufuegendes_element;
	node-&gt;next_element = topp;
	topp = node;
	++counter;
	return true;
}

//löscht erstes element
template &lt;class T&gt; void Queue&lt;T&gt;::deque()
{
	qNode *old_element = topp;
	topp = topp-&gt;next_element;
	delete old_element;
	--counter;
}

//gibt erstes element zurück
template &lt;class T&gt; T&amp; Queue&lt;T&gt;::first()const
{
	return topp-&gt;data;
}

#endif

int main(int argc, char *argv[])
{
	char *input;
	char *output;
	char in[10]=&quot;input.txt&quot;;
	char out[11]=&quot;output.txt&quot;;

	if(argc &gt;= 3)
		{
			input = argv[1];
			output = argv[2];
		}
	else
		{
			input = in;
			output = out;
		}

	fstream quelle;
	quelle.open(input, ios::in);

	fstream ziel(output, ios::out);

	Queue&lt;int&gt; intQueue;
	cout &lt;&lt; &quot;Queue leer? 0-&gt;nein....1-&gt;ja    &quot; &lt;&lt; intQueue.isEmpty() &lt;&lt; endl;

	//Werte aus Datei auf Queue schieben

	int value;
	while(quelle &gt;&gt; value)
		{
			intQueue.enque(value);
			cout &lt;&lt; value &lt;&lt; &quot;  &quot; &lt;&lt; &quot;abgelegt !&quot; &lt;&lt; endl;
		}	

	cout &lt;&lt; &quot;Queue leer? 0-&gt;nein....1-&gt;ja    &quot; &lt;&lt; intQueue.isEmpty() &lt;&lt; endl;
	cout &lt;&lt; intQueue.first();

	//bucketsort

	//geöffnete Datein schließen
	quelle.close();
	ziel.close();
}
</code></pre>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/243613/elemente-verkehrt-auf-queue-geschoben</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 22:19:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/243613.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 18 Jun 2009 20:49:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Elemente verkehrt auf Queue geschoben on Thu, 18 Jun 2009 20:49:36 GMT]]></title><description><![CDATA[<p>Hi ich hab ein Programm geschrieben wo Int-Werte aus einer Datei auf ein Queue geschoben werden und danach per Bucketsort wieder sortiert in eine neue Datei ausgibt.Aber mein Programm schiebt die Elemente Verkehrt auf den Queue.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;

using namespace std;

#ifndef _QUEUE_H
#define _QUEUE_H

template &lt;class T&gt;
class Queue
{
public:
	Queue(): counter(0), topp (0){}		//Konstruktor
	~Queue(){}				//Destruktor

//Funktionsprototypen

	void deque();		//löschen des ersten Elements
	bool enque(const T&amp;);	//einfügen eines Elements ans Ende

	T&amp; first()const;		//Zugriff auf das erste Element
	bool isEmpty()const;		//Test ob Queue leer ist

private:
			class qNode
				{
				public:
				T data;
				qNode *next_element;
				};	

			qNode *topp;		//Zeiger auf erstes Element
			int counter;		//zählt wie viel elemente in Queue

};

//Funktionen

//prüft ob Queue leer ist, 0 Queue ist nicht leer und 1 Queue ist leer
template &lt;class T&gt; bool Queue&lt;T&gt;::isEmpty()const
	{
	if(counter == 0)
	return true;
	else
	return false;
	}	

//fügt Element am Ende an
template &lt;class T&gt; bool Queue&lt;T&gt;::enque(const T&amp; einzufuegendes_element)
{
	qNode *node = new qNode;
	node-&gt;data = einzufuegendes_element;
	node-&gt;next_element = topp;
	topp = node;
	++counter;
	return true;
}

//löscht erstes element
template &lt;class T&gt; void Queue&lt;T&gt;::deque()
{
	qNode *old_element = topp;
	topp = topp-&gt;next_element;
	delete old_element;
	--counter;
}

//gibt erstes element zurück
template &lt;class T&gt; T&amp; Queue&lt;T&gt;::first()const
{
	return topp-&gt;data;
}

#endif

int main(int argc, char *argv[])
{
	char *input;
	char *output;
	char in[10]=&quot;input.txt&quot;;
	char out[11]=&quot;output.txt&quot;;

	if(argc &gt;= 3)
		{
			input = argv[1];
			output = argv[2];
		}
	else
		{
			input = in;
			output = out;
		}

	fstream quelle;
	quelle.open(input, ios::in);

	fstream ziel(output, ios::out);

	Queue&lt;int&gt; intQueue;
	cout &lt;&lt; &quot;Queue leer? 0-&gt;nein....1-&gt;ja    &quot; &lt;&lt; intQueue.isEmpty() &lt;&lt; endl;

	//Werte aus Datei auf Queue schieben

	int value;
	while(quelle &gt;&gt; value)
		{
			intQueue.enque(value);
			cout &lt;&lt; value &lt;&lt; &quot;  &quot; &lt;&lt; &quot;abgelegt !&quot; &lt;&lt; endl;
		}	

	cout &lt;&lt; &quot;Queue leer? 0-&gt;nein....1-&gt;ja    &quot; &lt;&lt; intQueue.isEmpty() &lt;&lt; endl;
	cout &lt;&lt; intQueue.first();

	//bucketsort

	//geöffnete Datein schließen
	quelle.close();
	ziel.close();
}
</code></pre>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729118</guid><dc:creator><![CDATA[WINFO2105]]></dc:creator><pubDate>Thu, 18 Jun 2009 20:49:36 GMT</pubDate></item><item><title><![CDATA[Reply to Elemente verkehrt auf Queue geschoben on Thu, 18 Jun 2009 20:55:49 GMT]]></title><description><![CDATA[<p>Ähm, was ist mit deinem anderen Thread?<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-243507.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-243507.html</a></p>
<p>Abgesehen davon findest du sowas sehr schnell raus, indem du dir auf Blatt Papier kurz überlegst, wie deine Queue technisch ablaufen sollte, und dann über den Debugger mit deinem Programm vergleichst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729124</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 18 Jun 2009 20:55:49 GMT</pubDate></item><item><title><![CDATA[Reply to Elemente verkehrt auf Queue geschoben on Thu, 18 Jun 2009 21:13:08 GMT]]></title><description><![CDATA[<p>Schon ok, war en irrtum. Ist schon alles gelöst....<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729133</guid><dc:creator><![CDATA[WINFO2105]]></dc:creator><pubDate>Thu, 18 Jun 2009 21:13:08 GMT</pubDate></item><item><title><![CDATA[Reply to Elemente verkehrt auf Queue geschoben on Fri, 19 Jun 2009 01:26:11 GMT]]></title><description><![CDATA[<p>WINFO2105 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;

using namespace std;  //! Nicht in Headern!

#ifndef _QUEUE_H //_X (Unterstrich, Großbuchstabe)-Bezeichner sind für Compiler reserviert - also nimm mal den Unterstrich am Anfang weg und benenn das makro mal iwie so, dass es definitiv niemand anders schon zufällig nutzt...
#define _QUEUE_H

template &lt;class T&gt;
class Queue
{
public:
	Queue(): counter(0), topp (0){}		//Konstruktor
//	~Queue(){}				//Destruktor
//einen leeren destruktor musst du auch nicht zu deklarieren+definieren - da reicht der compilergenerierte
//Funktionsprototypen

	void deque();		//löschen des ersten Elements
	bool enque(const T&amp;);	//einfügen eines Elements ans Ende

//	T&amp; first()const;		//Zugriff auf das erste Element
//eine non-const referenz auf das erste element -&gt; möglichkeit, daten zu ändern -&gt; non-const memberfkt! also brauchen wir 2 fkt., wenn wir auch eine non-const reference wiedergeben wollen:
	const T&amp; first()const;		//Zugriff auf das erste Element
	T&amp; first();		//Zugriff auf das erste Element

	bool isEmpty() const;		//Test ob Queue leer ist
private:
			class qNode
			{
			public:
				T data;
				qNode *next_element;
//ein konstruktor ist nie falsch:
				qNode(const T&amp; value, qNode *_next_element)
				: data(value), next_element(_next_element) //initialisierungsliste
				{}
			};	
	
			qNode *topp;		//Zeiger auf erstes Element
			int counter;		//zählt wie viel elemente in Queue
//den counter brauchst du eigtl nicht:
size_t size() const
{
 size_t R(0);
 for(qNode* i=topp; topp; topp = topp-&gt;next_element, ++R);
 return R;
}
	
};

//Funktionen

 
//prüft ob Queue leer ist, 0 Queue ist nicht leer und 1 Queue ist leer
template &lt;class T&gt; bool Queue&lt;T&gt;::isEmpty()const
{
  return counter == 0;
//bzw.
  return !counter;
//oder ohne counter:
  return topp == 0;
//also
  return !topp;
}

//fügt Element am Ende an
template &lt;class T&gt;
//bool - wieso bool, wenn du so und so immer true zurückgibst?
void
Queue&lt;T&gt;::enque(const T&amp; einzufuegendes_element)
{
//	qNode *node = new qNode;
//	node-&gt;data = einzufuegendes_element;
//	node-&gt;next_element = topp;
//	topp = node;

//zwischenschritt, da wir jetzt einen konstruktor haben:
//	qNode *node = new qNode(einzufuegendes_element, topp);
//	topp = node;

//wird zu:
	topp = new qNode(einzufuegendes_element, topp);
//und das hier bleibt, falls du weiter mit dem counter arbeiten möchtest:
	++counter;
}

//löscht erstes element
template &lt;class T&gt;
void Queue&lt;T&gt;::deque()
{
	qNode *old_element = topp;
	topp = topp-&gt;next_element;
	delete old_element;
	--counter;
}

//gibt erstes element zurück
template &lt;class T&gt;
const T&amp; Queue&lt;T&gt;::first() const
{
	return topp-&gt;data;
}

//gibt veränderbares erstes element zurück
template &lt;class T&gt;
T&amp; Queue&lt;T&gt;::first()
{
	return topp-&gt;data;
}

#endif

#include &lt;string&gt;

int main(int argc, char *argv[])
{
//	char *input;
//	char *output;
	const char in[]=&quot;input.txt&quot;; //!
	const char out[]=&quot;output.txt&quot;; //!

	if(argc &gt;= 3)
	{
		input = argv[1];
		output = argv[2];
	}
	else
	{
		input = in;
		output = out;
	}
	
	fstream quelle;
	quelle.open(input, ios::in);
	
	fstream ziel(output, ios::out);
	
	
	Queue&lt;int&gt; intQueue;
//sieht so schöner aus, meinst du nicht auch?!
	cout &lt;&lt; &quot;Die Queue ist &quot;;
	if (intQueue.isEmpty())
		cout &lt;&lt; &quot;nicht &quot;;
	cout &lt;&lt; &quot;leer?&quot; &lt;&lt; endl;
	
	//Werte aus Datei auf Queue schieben
	
	int value;
	while(quelle &gt;&gt; value)
	{
		intQueue.enque(value);
		cout &lt;&lt; value &lt;&lt; &quot;  &quot; &lt;&lt; &quot;abgelegt !&quot; &lt;&lt; endl;
	}	
		

//und so geht es kürzer:
	cout &lt;&lt; &quot;Die Queue ist &quot; &lt;&lt; (intQueue.isEmpty() ? &quot;nicht &quot;);
	cout &lt;&lt; &quot;leer?&quot; &lt;&lt; endl;

	if(! intQueue.isEmpty()) //wichtig! ansonsten bekommst du hier müll!
		cout &lt;&lt; intQueue.first();

	
	/*...*/
	
//brauchst du nicht, weil die klassen das im destruktor automatisch machen:
	//geöffnete Datein schließen
//	quelle.close();
//	ziel.close();
}
</code></pre>
</blockquote>
<p>ich hoffe, es hilft dir...</p>
<p>da es mir noch einfällt:<br />
du brauchst nen destruktor - allerdings musst du dort auch den speicherplatz freigeben - das macht man in der regel so:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
void clear() //zusätzliche öffentliche member-fkt, da man diese funktionalität ja auch nach außen anbieten kann
{
  while(! isEmpty())
     deque();
}

template &lt;typename T&gt;
Queue::~Queue() //unser destruktor ruft jz einfach clear auf...
{
  clear();
}
</code></pre>
<p>bb</p>
<p>gibt nat. noch ca. 100 andere kleine dinge, die man verbessern könnte - aber das sollte für den anfang erst mal genügen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729187</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729187</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Fri, 19 Jun 2009 01:26:11 GMT</pubDate></item><item><title><![CDATA[Reply to Elemente verkehrt auf Queue geschoben on Fri, 19 Jun 2009 14:03:09 GMT]]></title><description><![CDATA[<p>Ich würde zum Beispiel andere Bezeichner verwenden. <code>deque</code> ist schon mal sehr irreführend, da es in der Standardbibliothek einen Container mit diesem Namen gibt. Das steht dort für Double Ended Queue. Und <code>enque</code> ist nicht viel besser.</p>
<p>Halte dich doch ein wenig an inoffizielle Konventionen und nenne die Methoden <code>push</code> und <code>pop</code> , dann weiss jeder, was gemeint ist. Oder hänge bei deinen Namen mindestens noch ein <code>ue</code> an, damit diese auch Wörter sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729496</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729496</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 19 Jun 2009 14:03:09 GMT</pubDate></item></channel></rss>