Archivlink: javarea.de Forum > Talk Talk > [C] Wie zähle ich einen verkettet Liste ?
Vollständigen Link anzeigen: javarea.de Forum > Talk Talk > [C] Wie zähle ich einen verkettet Liste ?

Pages: [1]

geschrieben von Shaddow am 19.08.2004 - 16:40
Hi Leute,
ich hab mal ne Frage, ich wollt mich mit der alten Debatte der Sortieralgorythmen für Zahlen beschäftigen....
Also ich habe eigentlich eine gute Idee, nur an der Umsetztung hapert es:

Ich möchte eine beliebig lange Reihe von Zahlen einlesen lassen, normalerweise würd ich das mit nem Zeiger über eine verkette Liste machen, aber ich muss bei der Erstellung des Arrays, in das er die Zahlen dann packen soll, wissen, wie viele Zahlen eingegeben wurden.
Uach später bei einigen Schleifen bzw. rekrusiven Funktionen brauche ich diese Zahl, also gibt es eine Möglickeit herauszukriegen, wie viele Zahlen das sind?
Ich hätte sonst nur eine Möglichkeit, ich lasse die Zahlen über eine Schleife einlesen und bei jedem Durchgang eine Variable um 1 erhöhen.

Thx, überlegt mal

geschrieben von René am 19.08.2004 - 16:51
in PHP wäre es "count($array); oder sizeof($array);" und Zahlen natürlich sortieren wäre "natsort($array);"

geschrieben von Shaddow am 19.08.2004 - 17:17
Ja danke René ABER:
Laut Titel geht es um C
und ich ahbe ja noch kein ARray, wie man diese bestandteile Zählt ist mir ja klar, ich habe halt nur eine verkettet liste

geschrieben von Daniel am 19.08.2004 - 17:46
Zitat
 Original geschrieben von Shaddow am 19.08.2004 - 16:40

Ich hätte sonst nur eine Möglichkeit, ich lasse die Zahlen über eine Schleife einlesen und bei jedem Durchgang eine Variable um 1 erhöhen.


Wäre eine möglichkeit. Es gibt aber auch in C / C++ die zizeof() Function...
http://msdn.microsoft.com/library/d....erator.asp

Daniel

geschrieben von Daniel am 19.08.2004 - 17:47
Hmm.. warum speicherst du sie nicht gleich in einem Array... Zeiger auf Zeiger ;)

geschrieben von Shaddow am 19.08.2004 - 17:50
Was genau meinst du mit Zeiger auf Zeiger? Ich muss ja vorher bei der Definition wissen, wie viele Teile das Array haben muss.

Ich zeig mal den Code, so wie ich ihn jetzt hab:

HTML-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29: 
30: 
31: 
32: 
33: 
34: 
35: 
36: 
37: 
38: 
39: 
40: 
41: 
42: 
43: 
44: 
45: 
46: 
47: 
48: 
49: 
50: 
51: 
52: 
53: 
54: 
55: 
56: 
57: 
58: 
59: 
60: 
61: 
62: 
63: 
64: 
65: 
66: 
67: 
68: 
#include <iostream.h>

class IntList
{
public:
	int Number;
	IntList *Next;
};

int
GetNumber()
{
	int Number;

	cin >> Number;
	return Number;
}


int main()
{


	int Number;
	int zaehler=0;
	IntList *ListPtr, *LastPtr = 0, *First = 0;

	cout << "WIE lautet die Zahl?\n";


	while ( Number = GetNumber() )
	{
		zaehler++;

		ListPtr = new IntList;

		ListPtr->Number = Number;
		ListPtr->Next = 0;


		if ( LastPtr)
			LastPtr->Next = ListPtr;
		
		else 
			First = ListPtr;

		LastPtr = ListPtr;

	}

	if ( First)
	{
		cout << "Die Liste ist: ";
		ListPtr = First;

		do
		{
			cout << ListPtr->Number << " ";
			ListPtr = ListPtr->Next;
		}
		while(ListPtr);

		cout << "\n" << zaehler << "x Durchlaufen";
		
	}

	return 0;
}

geschrieben von Shaddow am 19.08.2004 - 19:20
Also nochmal:
Mein momentan gröstes Problem ist, dass ich ein Array nicht mit einer Variable erstellen kann:
wenn ich also schreibe:
HTML-Quelltext
1: 
int reihe[zaehler];


dann kommt:

Zitat
 orginal geschrieben von Microsoft Visual C++
D:\Programme\MVS C++\MSDev98\MyProjects\Sort\sort.cpp(67) : error C2057: Konstanter Ausdruck erwartet
D:\Programme\MVS C++\MSDev98\MyProjects\Sort\sort.cpp(67) : error C2466: Reservierung eines Feldes der konstanten Groesse 0 nicht moeglich
D:\Programme\MVS C++\MSDev98\MyProjects\Sort\sort.cpp(67) : error C2133: 'reihe' : Unbekannte Groesse

geschrieben von Daniel am 20.08.2004 - 09:39
Morgen..

das muss so aussehen Du musst ein dynamisches Array erstellen

HTML-Quelltext
1: 
2: 
3: 
4: 
5: 
int * reihe = new int[zähler];

...

delete[] reihe;


Daniel

geschrieben von Shaddow am 20.08.2004 - 15:56
Jop so geht das, ich wusste blos nicht mehr wie die syntax war
ich progge jetzt erst mal weiter, und wenns wieder probs gibt meld ich mich ;)

geschrieben von Shaddow am 20.08.2004 - 18:40

geschrieben von Daniel am 20.08.2004 - 19:08
for(...) {
for(...) {
}
}

geschrieben von Shaddow am 20.08.2004 - 20:29
nein ich meinte das anders:
also ich will ja beim ersten durchgang alle zweierpaare verbinden lassen, und beim zweiten durchgang alle vierer usw... aber mir fällt grad auf, dass das viel zu umständlich ist.
also lass ich jetzt jede zahl überprüfen, ob sioe größer ist, als die anderen und dann einfügen.
hier der code dafür, aber der funzt nicht so wie er soll:
HTML-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
for ( int i = 0; i< zaehler; i++)
	{
		for ( int j = 0; j< zaehler; j++)
		{
			if ( reihe[i] > reihe[j])
			{
				break;}
			else
			{
				result[i] = reihe[i];}
		}
	}

geschrieben von Shaddow am 22.08.2004 - 11:14
hat denn keiner mehr eine idee zu diesem kniffligen progblem opder hat jemand vieleicht schon ein fertiges script, dmit ich mir dort ein paar anregungen holen kann?

geschrieben von Shaddow am 30.08.2004 - 20:20
ES IST VOLLBRACHT!
der sortierer funzt.
Auf meiner neuen Website, wird er das erste Projekt zum Download sein

besonderer dank an danny und javarea


Powered by: JBB v.2.0.4 Copyright ©2000-2006, www.javarea.de.