Avatar billede trp79 Nybegynder
01. marts 2002 - 23:16 Der er 15 kommentarer og
1 løsning

dobbel-thægtede lister (pointere)

Jeg må i en opgave ikke bruge javas egne listeklasser. Derfor skal jeg have lavet følgende dobbelt-hægtet:

public void indsaet(Film vv)
{
listeElement ny= new listeElement(vv);
if (first==null || alfabetiskFoer(ny.v, first.v))
{
  ny.next= first;
  first= ny;
}
else
{
  listeElement temp= first;
  while (temp.next!=null
  && !alfabetiskFoer(ny.v, temp.next.v))

  temp= temp.next;
  ny.next= temp.next;
  temp.next= ny;
  ny.prev=temp;
}
}
Men jeg mangler at sørge for det element der er større's tilbage-pointer... who to do that..?
Avatar billede trp79 Nybegynder
01. marts 2002 - 23:19 #1
Rettelse:
når jeg sætter et element ind imellem to andre elementer (et der er mindre og et der er større), mangler jeg at sørge for det element der er større's tilbage-pointer.
Avatar billede erikjacobsen Ekspert
01. marts 2002 - 23:37 #2
ny.next.prev=ny;
Avatar billede trp79 Nybegynder
01. marts 2002 - 23:44 #3
Det funker desværre ikke....
Avatar billede erikjacobsen Ekspert
01. marts 2002 - 23:50 #4
Det virker ikke hvis det bliver indsat som sidste element.
Det er korrekt. Men det vil virke mellem 2 elementer.

Så det skal vel være:

  if (ny.next!=null)  ny.next.prev=ny;
Avatar billede trp79 Nybegynder
01. marts 2002 - 23:58 #5
sorry dude... det funker heller ikke...
Avatar billede trp79 Nybegynder
02. marts 2002 - 00:01 #6
private boolean alfabetiskFoer(Film v1, Film v2)
//hjælpefunktion, der returnerer <true> hvis <v1> kommer alfabetisk før<v2>
//ellers <false>
{
if (v1.getTitleOrg().compareTo(v2.getTitleOrg())<=0) return true;
  else return false;
}
Avatar billede erikjacobsen Ekspert
02. marts 2002 - 00:01 #7
Kunne det tænkes du vil vise os hvad du har gjort med
mit forslag?
Avatar billede trp79 Nybegynder
02. marts 2002 - 00:04 #8
jeg satte det ind efter first=ny;
Men programmet virker ikke.
Avatar billede trp79 Nybegynder
02. marts 2002 - 00:06 #9
det er fordi jeg ikke får klaret problemstillingen med min tilbage-pointer i indsæt-metode
Avatar billede erikjacobsen Ekspert
02. marts 2002 - 00:07 #10
Javel, så men det er jo ikke kun der, at der er problemer med
indsættelse mellem elementer. Det er faktisk et helt andet sted.
Prøv at tegne "pointerne" når du finder den rigtige plads i
din while-løkke.
Avatar billede trp79 Nybegynder
02. marts 2002 - 00:40 #11
Der får jeg nok lige brug for et hint mere.. Tror efterhånden jeg har stirret mig blind på det, har siddet med det i flere timer...
Avatar billede erikjacobsen Ekspert
02. marts 2002 - 00:51 #12
Du har fået de oplysninger du skal bruge. Jeg hopper ud af
spørgsmålet nu.

Jeg ville have dumpet dig før, for det er da den dummeste
kommentar man kan komme med: "Det funker desværre ikke.... "

HVAD virker ikke? HVAD har du gjort? HVORDAN tester du dit
program?

Men ok, så havde jeg lavet en fejl. Vi er ikke synske, men vil
gerne hjælpe. Men held og lykke.

Du behøver ikke svare mig - jeg ser det ikke.
Avatar billede trp79 Nybegynder
02. marts 2002 - 00:59 #13
Ærgeligt du ikke vil se mit takkebrev, men her er det da alligevel:
Det er jeg da godt nok meget ked af. Beklager at jeg er ny herinde og at jeg ikke har rutinen. Det må du sørme undskylde mester. Det er da dejligt at få sådan en modtagelse og så positive svar. Sætter pris på du gav mig så meget snor, det var stort og rigtigt smukt af dig.
Avatar billede disky Nybegynder
02. marts 2002 - 09:18 #14
Kig på hvordan SUN har implementeret det.
Avatar billede jakoba Nybegynder
02. marts 2002 - 22:37 #15
public void indsaet(Film vv) {
  listeElement ny= new listeElement(vv);
  if (first==null || alfabetiskFoer(ny.v, first.v)) {
        // indsætter element forrest i listen. se note nedenfor.
    if ( first != null ) first.prev = ny;            // indsat linie her
    ny.prev = null;                                  // indsat linie her
    ny.next = first;
    first  = ny;
  } else {
        // indsætter element der ikke er forrest i listen
    listeElement temp = first;
    while (temp.next!=null && !alfabetiskFoer(ny.v, temp.next.v))
      temp = temp.next;
    if ( temp.next != null ) temp.next.prev = ny;    // indsat linie her
    ny.prev = temp;
    ny.next = temp.next;
    temp.next = ny;
  }
}

Som regel vil man lave et 'rod' element til at være 'altid det første' i listen, dvs det har en v værdi der er garantere lavere end noget brugerne kan risikeres at komme med. På den måde kan man slippe for at skulle lave en 'special case' for indsætning forrest i listen.

mvh JakobA
Avatar billede trp79 Nybegynder
02. marts 2002 - 22:52 #16
Endelig en venlig sjæl... Tak for hjælpen og ikke mindst hintet om rod-værdien :o) Den køber jeg....
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester