Avatar billede matjak Nybegynder
06. maj 2002 - 22:48 Der er 9 kommentarer

dobbelthængtet liste

hvordan laver jeg en dobbelhægtet liste vha pointere?
en dobbelhægtet liste er en liste af struct med 2 pointere hvor man vha 2 andre pointere skal få en række struct'er til at hænge sammen so man kan skrive dem ud både fra den nyest indtastede og fra den først indtastede. jeg kan godt lave den ene vej men hvis jeg prøver at hægte den først indtastede sammen med den forrige igen skriver den bare listen igen og igen og igen ......
Avatar billede jpk Nybegynder
07. maj 2002 - 09:06 #1
Måske jeg misforstår, men du skal naturligvis ikke hægte den først indtastede node sammen med andre end nummer 2.
Avatar billede chries Nybegynder
07. maj 2002 - 09:38 #2
du har sikert fejl i din kode, du får nok ikke tildelt prev og next pointer rigtigt. Her er et eksempel jeg lige hurtig har lavet, på hvordan det kan gøres:

// TestMe8.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "iostream.h"

class Node
{
public:
    Node( int nID ) { pNext = NULL; pPrev = NULL; nNodeID = nID; }

    Node *pNext;
    Node *pPrev;

    int nNodeID;
};

int main(int argc, char* argv[])
{
    Node *pList = NULL, *pHelper = NULL, *pLast = NULL;;

    pList = new Node( 0 );
    pHelper = pList;

    // indsæt 3 bag i listen
    for( int i=1; i<4; i++ )
    {
        pHelper->pNext = new Node(i); // sidste node -> next = ny node
        pHelper->pNext->pPrev = pHelper;    // ny node -> prev = sidste node

        pHelper = pHelper->pNext;    // pHelper = sidste element i liste

        pLast = pHelper; // sidste element i liste
    }

    // indsæt 4 foran
    for( i=4; i<8; i++ )
    {
        pHelper = new Node(i);    // ny node
        pHelper->pNext = pList;    // ny node -> next = list start
        pHelper->pNext->pPrev = pHelper; // ny node -> next's "-> prev" = den nye node
        pList = pHelper;        // list start = ny node
    }

    // udskriv forfra
    i = 0;

    pHelper = pList;
    while( pHelper != NULL )
    {
        cout << "list element: " << i++ << ", node id: "  << pHelper->nNodeID << endl;
        pHelper = pHelper->pNext;
    }

    cout << endl << endl;
    // udskriv bagfra;

    pHelper = pLast;
    while( pHelper != NULL )
    {
        cout << "list element: " << --i << ", node id: "  << pHelper->nNodeID << endl;
        pHelper = pHelper->pPrev;
    }

    return 0;
}
Avatar billede matjak Nybegynder
07. maj 2002 - 18:04 #3
chries:
Som jeg skrev skal det være en struct og ikke en class jeg skal lave listen med.
jpk:
Det har du fuldstændig ret i og det er der problemet ligger. hvordan gør jeg det ??
Avatar billede chries Nybegynder
08. maj 2002 - 09:15 #4
forskellen på struct og class er minimal =)

class Node
{
public:
    Node( int nID ) { pNext = NULL; pPrev = NULL; nNodeID = nID; }

    Node *pNext;
    Node *pPrev;

    int nNodeID;
};

samme som

struct Node
{
    Node *pNext;
    Node *pPrev;

    int nNodeID;
};

eneste forkel er du selv skal initialisere værdierne når den new's.
Avatar billede chries Nybegynder
08. maj 2002 - 09:16 #5
(class->struct) altså i den kode jeg har smidt ind :-)
Avatar billede kamikaze Nybegynder
13. maj 2002 - 12:56 #6
Den eneste forskel på class og struct er at class er default private, og struct er default public. (En struct kan også have metoder)
Avatar billede chries Nybegynder
13. maj 2002 - 12:57 #7
ikke i C :-)
Avatar billede matjak Nybegynder
13. maj 2002 - 19:14 #8
Jeg skulle nok have skrevet at det var i C++ jeg skulle have lavet den liste, men det er ligemeget nu jeg fand ud af det selv. forresten chries hvad betyder node?
Avatar billede chries Nybegynder
14. maj 2002 - 09:10 #9
betyder knudepunkt (element).
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