Aufgabenblatt 10


parser:

if (floatVal.matches(“\d+\.\d+”) || floatVal.matches(“\d+”))
return startpos;

else blabla

danke chaosfan/raptor :wink:


du brauchst noch einen Pointer der auf den Stack zeigt, der das nächste element der que im moment oben hat. nimmst du ein element raus (deq) muss der pointer einfach wechseln (mod 2 in dem fall). fürs einsortieren müsstesst du noch die höhe der beiden stacks zur verfügung haben, dafür hab ich einfach noch eine funktion size() beim stack hinzugefügt, die mir einfach den index+1 vom array des stacks gibt (anstatt index public zu machen, was net sinnvoll is). … ok is dann net 100% ADT konform, weil net definiert etc., aber die methode braucht zumindest keinen rechenaufwand um die höhe des stacks zu liefern, also no big deal imho.
optional könnte man des aber auch mit nem zweiten pointer lösen (wenn man komplett sich nur auf die angegebenen zugriffsfunktionen beschränken will) der immer festhält auf welchen der beiden stacks geschrieben werden muss als nächstes… wechselt einfach immer beim einfügen, sowie beim rausnehmen, da du aufm ersten stack, wenn du die elemente durchnummerieren würdest, ja alle mit ungeraden nummern hast, und aufm andern alle mit geraden. (natürlich solang du noch nix rausgenommen hast, wenn du was deq „verschiebt“ sich die nummerierung gedanklich eben genau 2->1 3->2 usw., darum müssen die pointer au immer wechseln)


Schon klar. Ich hab auch eine toggle-Variable. Nur das führt bei mir bei obigem Code zu folgendem Ergebnis:

1 2 → 1 2 → 1 2
------ → ------ → ------
1 2 → 5 4 → 5 4
3 4 → 7 6 → 7 6
5 6 → → 8 9
7 - → → 10 -

Und jetzt kommt natürlich bei der Ausgabe ein Zahlendreher rein.


ok, wenn dus nicht mit einem size-vergleich der beiden stacks machst, musst du den write-pointer immer beibehalten wenn du was entfernst, hab ich vorhin falsch geschrieben, müsste klappen so.
ich vergleich wie gesagt einfach die grösse der beiden stacks und vertausche gegebenenfalls die beiden stacks, wenn der stack, auf den der pointer zeigt höher ist als der andere. wie gesagt, man muss sich ein wenig von der nummerierung “stack1”,“stack2” lösen, da beim herausnehmen von elementen praktisch die beiden stacks ihre bedeutung wechseln.

    int nextElementPtrNot = (nextElementPtr + 1) % 2;
    Stack workSt = stk[nextElementPtr];
    Stack tmpSt = stk[nextElementPtrNot];

    /* choose the working stack */
    if (stk[nextElementPtr].size()
          > stk[nextElementPtrNot].size()) {
        workSt = stk[nextElementPtrNot];
        tmpSt = stk[nextElementPtr];
    }

so funktioniert es auf jeden fall, auch dein beispiel.

das mit dem 2. write-ptr müsste gehn, wenn du write bei enq toggelst und read bei deq.


so, mal wieder n blatt geschafft… beim nächsten mal fang ich aber doch früher an :red:

Attachment:
aufdenletztendrücker.PNG: https://fsi.cs.fau.de/unb-attachments/post_40013/aufdenletztendrücker.PNG


ich habs heute früh von 7:30-8:45 schnell gemacht ^^


ich bin stolz auf dich


LOL, hättest du doch noch ein paar Sekunden gewartet, dann wär der Screen noch geiler geworden :*)


fast wie bei ebay :smiley:


war ja nich so, als wärs beabsichtigt gewesen… mir is nur aufgefallen, dasses langsam knapp wird und da hab ich schnell abgegeben. außerdem hab ich nich dran gedacht, dass das hochladen ja auch nochmal n weilchen dauert


Ja wie? das war nicht mal Absicht??? :smiley: