10. januar 2005 - 15:32Der er
13 kommentarer og 1 løsning
Hægtede lister
Hej igen
Jeg har nu i 20 mins tid siddet og googlet, men jeg synes stadig jeg mangler en rigtig god side, der forklarer helt fra bunden, hvordan hægtede lister virker.
Især er jeg ude efter, hvordan man opretter en dynamisk string (array of char), da den melder fejl hvis man skriver char streng[] og char streng[0] :/
Nogen der har en god side? eller evt. selv lige kan ridse det vigtigste op?
Jeg har C++'ificeret kalps kode (med den ændring at der er en pointer til sidste element i listen):
#include <iostream>
using namespace std;
struct Node { struct Node *next; char data; };
struct List { struct Node *head; struct Node *tail; };
// create a new list // O(1) List* newList() { List *list = new List; list->head = NULL; list->tail = NULL; return list; }
// delete the list and collect the garbage from memory // O(n), n is |listen| List* delList(List *list) { Node *iter = list->head; Node *temp; while(iter) //delete all nodes { temp = iter; iter = iter->next; delete temp; } delete list; return NULL; }
// add an element to the list // O(1) void addNode(List *list, char data) { Node *elem = new Node; elem->next = NULL; elem->data = data; if(list->head == NULL) { list->head = elem; list->tail = elem; } else { list->tail->next = elem; list->tail = elem; } }
// prints the elements of the list // O(n), n is |listen| void printList(List *list) { Node *iter = list->head; while(iter) { cout << iter->data; iter = iter->next; } }
int main() { List *list = newList(); addNode(list, 'a'); addNode(list, 'b'); addNode(list, 'e'); addNode(list, 'k'); addNode(list, 'a'); addNode(list, 't'); addNode(list, '\n'); printList(list); list = delList(list);
return 0; }
Det er kun et eksempel, hvis du skal bruge det kan du jo omskrive som det passer dig og dit problem. Det ville nok ikke være så tosset at lave en klasse der indkapsler listen.. :-)
En Node er en struktur bestående af 2 variable. En pointer til næste Node i listen og en char som er det data som er associeret med noden. Sidste Node i listen peger på NULL
En List består af 2 variable. En pointer til første element i listen og en pointer til sidste element i listen.
En ny liste (newList) initialiserer listen (head og tail peger på NULL)
Der er 2 tilfælde ved indsættelse af en node (addNode) Hvis listen er tom, så skal head og tail pege på den node som initialiseres Ellers opdateres tail til at pege på den node som initialiseres
Lige et lille tillægsspørgsmål, hvis i skulle ha lyst (ellers kan jeg godt oprette et nyt spørgsmål, hvis det er?)
Jeg har oprettet følgende struct:
struct medlemmer { char navn[20]; char gade[20]; char postnummer[8]; char by[20]; char tlf[20]; char mobil[20]; char email[20]; int medlemsnr; struct medlemmer *ptrnext; };
Og jeg kan da også fint skrive til den osv, men problemet kommer når jeg skriver det ned til en fil. Hvis navnet ikke er 20 chars præcist, kommer der en masse underlige tegn ned i filen :/ Vi fik at vide, at det var fordi vi brugte arrays, og at vi skulle bruge hægtede lister istedet, men det giver da nøjagtigt det samme problem?
Synes godt om
Ny brugerNybegynder
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.