04. februar 2004 - 12:33
Der er
3 kommentarer og 1 løsning
dobbelthægtet liste
Det som jeg ønsker er følgede: en dobbelt hægtet liste som kan håndter det her. den vandrette linje skal illustere et array og de lodrette er hægtet lister koblet til. s1 s2 s3 s4 s5 s6 1 1 1 1 1 1 1 1 1 dvs at de hægtede lister kan have forskellige længder. Men er knyttet til en bestemt plads i arrayet. jeg har det her kode, som jeg kæmper med: #include <stdio.h> #include <stdlib.h> struct node { char *seg; int sta; struct node *next; }; void add(struct node **first, char *seg) { struct node *extra,*last; extra = (struct node *)malloc(sizeof(struct node)); extra->seg = seg; extra->next = NULL; if(*first==NULL) { *first = extra; } else { last = *first; while(last->next!=NULL) last=last->next; last->next = extra; } } void print(struct node *first) { struct node *curr; curr = first; while(curr!=NULL) { printf("%s\n",curr->seg); curr = curr->next; } } //denne main del er kun for at teste! int main() { struct node *first = NULL; add(&first, "s1"); add(&first, "s2"); add(&first, "s3"); add(&first, "s4"); add(&first, "s5"); add(&first, "s6"); print(first); return 0; }
Annonceindlæg fra Context&
04. februar 2004 - 19:14
#1
Jeg ved ikke rigtigt hvad der er dit spørgsmål. Vil du lave et array af linkede lister eller en linket liste af arrays? Koden fejler ikke noget bortset fra: 1: Det er en enkelt linket liste, og ikke en dobbelt linket liste. 2: Du bør trevle listen op og frigive (free) node'rne inden du afslutter.
05. februar 2004 - 00:41
#3
Her er et eksempel med et array af dobbelt linkede lister: #include <stdio.h> #include <stdlib.h> struct node { char *data; struct node *prev; struct node *next; }; void add(struct node **first, char *data) { struct node *extra,*last; extra = (struct node *)malloc(sizeof(struct node)); extra->data = data; extra->prev = NULL; extra->next = NULL; if(*first==NULL) { *first = extra; } else { last = *first; while(last->next!=NULL) last=last->next; last->next = extra; extra->prev = last; } } void print(struct node *first) { struct node *curr; curr = first; while(curr!=NULL) { printf("this=%p prev=%p next=%p data=%s\n",curr,curr->prev,curr->next,curr->data); curr = curr->next; } } void xadd(struct node **first, int ix, char *data) { add(&first[ix], data); } void xprint(struct node **first,int n) { int i; for(i=0;i<n;i++) { printf("list %d:\n",i); print(first[i]); } } int main() { int i; struct node **first = (struct node **)malloc(6*sizeof(struct node *)); for(i=0;i<6;i++) first[i]=NULL; xadd(first, 0, "a"); xadd(first, 0, "bb"); xadd(first, 0, "ccc"); xadd(first, 2, "xxx"); xadd(first, 2, "yy"); xadd(first, 2, "z"); xadd(first, 4, "1"); xadd(first, 4, "2"); xadd(first, 4, "3"); xprint(first,6); return 0; }