Doppelt verkettete Liste
-
Hallo Leute,
ich habe dank einer Beispieldatei eine doppelt verkettete Liste aufstellen können und kriege es hin, dass Eingaben gespeichert werden. Aber wie kann ich denn nun auf zwei Elemente zugreifen?
Ich muss einen Taschenrechner programmieren, die einzelnen Werte sowie die Rechenzeichen werden in der verketteten Liste gespeichert.
Wie könnte ich denn jetzt eine Rechnen-Funktion programmieren? Angenommen es handelt sich nur um eine Addition. In der Liste sei gespeichert: 2 +, 4 +, 5+
Wie wähle ich das erste Element an und addiere es mit dem zweiten?Ich wäre dankbar wenn mir jemand das Thema ein wenig erklären könnte.
Viele Grüße
aperture
-
Bei deiner Liste solltest du auf jeden Fall einen Verweis von außen haben (z.B. einen Zeiger auf das erste Element). Dann kannst du von dort ausgehend an den Vorgänger- und Nachfolger-Zeigern entlanghangeln, um die benachbarten Elemente zu erreichen.
-
ihr spinnt doch beide, nachts wenn alle leute schlafen hier einen chat zu eröffnen wer den längeren hat... xD
... und dazu keine antwort an den threadersteller

-
Skym0sh0 schrieb:
ihr spinnt doch beide, nachts wenn alle leute schlafen hier einen chat zu eröffnen wer den längeren hat... xD
... und dazu keine antwort an den threadersteller

Danke, hatte gerade denselben Gedanken beim Durchlesen der drei Seiten

Vielleicht kann man sich besser was drunter vorstellen, wenn ich den Code uploade:
http://www.files.to/get/16707/eg2pp31cyh (2 KB, 5 Dateien)Bitte nicht an den Bezeichnungen verwirren, ich habe das von einem anderen Programm übernommen und nicht teilweise alle Bezeichnungen passend gemacht.
Derzeit ist es möglich, Werte und Rechenzeichen in der Datenbank zu speichern. Aber ich weiß nicht, wie ich mit diesen nun rechnen kann. Ich würde jetzt in der Funktion "daten_loeschen" (wie gesagt, Name unpassend) eine Rechnung durchführen, also zu Beginn die ersten beiden Werte zu addieren/subtrahieren/multiplizieren oder dividieren.Ich habe hier aber keinen Ansatz. Wäre es ein array, könnte ich "array[0] + array [1]" machen. Aber mit der verketteten Liste komme ich nicht klar.
Viele Grüße
apertureEDIT 15.7.: Datei wegen mangelndem Interesse entfernt (wurde nie heruntergeladen).
-
sorry, kollege, aber rutnerladen tu ich nix. und das dürfte vielen anderen genauso gehen (ideone ist schon hart genug ;))
die einfachste funktion um 2 nachbarn zu addieren wäre ja so in etwa:
int add(int indexA, int indexB) { // return array[indexA] + array[indexB]; node * it1 = this->begin; while ( indexA && it1 ) { it1 = it1->next; indexA--; } int A = it1->value; node * it2 = this->begin; while ( indexB && it2 ) { it2 = it2->next; indexB--; } int B = it2->value; return A + B; }das wäre die simpelste einfachste und schlechteste lösung... (kann man verbessern, bei spezialfällen wie indexA < indexB, dass man von it wenn indexA == 0 ist weiter zu indexB zählt, und vieles mehr)
wenn deine operationen nach dem schema gespeichert sind:
zahl, op, zahl, op, zahl, op ....kannst du folgendes machen(ist aber ohne rechenregeln):
int evaluate() { int result = 0; node * it = this->begin; while ( it ) { int tmp; switch ( it->next ) // der operator { case '+': tmp = it->value + it->next->next->value; break; case '-': tmp = it->value - it->next->next->value; break; case '*': tmp = it->value * it->next->next->value; break; case '/': tmp = it->value / it->next->next->value; break; } result += tmp; it = it->next->next; // zahl -> op -> zahl (auf die nächste zahl wird zugegriffen) } return result; }das wäre eine einfache möglichkeit...
-
Vielen Dank für deine Antwort (und die anderen Antworten), das hat mir sehr weitergeholfen!
Viele Grüße
aperture