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;
}
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;
}