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 DE-CIX
Edge computing: behandling ved kilden
Edge computing revolutionerer den måde, data behandles på, ved at bringe kapacitet og ydeevne tættere på dér, hvor der er behov for det.
15. april 2025
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; }