я определил список, используя:
typedef struct st_list {
Node * by_name ;
Node * by_age;
} SortedList ;
После этого я определил узел, используя:
typedef struct st_node {
char name [100];
unsigned int age;
struct st_node * suivant_nom ;
struct st_node * suivant_age ;
} Node ;
После этого я определил функцию для вставки элемента в этот список:
void insert (SortedList* l , char* name , int age ){
Node *N,*A,*tmp,*new;
N=l->by_name;
A=l->by_age;
tmp=NULL;
new= (Node*)malloc(sizeof(Node));
new->age=age;
new->name=strcpy(new->name,name);
if (N==NULL) {N=new;}
while ((N!=NULL) & strcpy(name,N->name)<0){
tmp=N;
N=N->suivant_nom;}
tmp->suivant_nom=new;
new->suivant_nom=N;
while ((N!=NULL) & strcpy(name,N->name)<0){
tmp=N;
N=N->suivant_nom;}
tmp->suivant_age=new;
new->suivant_age=N;}
После этого я определил также функцию с этим прототипом:
Node* copyNode(None* p) ;
, которая копирует узел и возвращает указатель на его копию.
ЧтоЯ хочу сделать прямо сейчас, чтобы реализовать функцию, которая делает копию списка, заданного в качестве аргумента, его прототип будет:
SortedList* duplicatelist( SortedList l) ;
Эта функция будет возвращать указатель на копию SortedList l;Я знаю Алгоритм В C, который копирует LinkedList, например Как скопировать связанный список в другой список? , но там мы не можем использовать этот метод, потому что список отсортирован дважды.Я попытался использовать массив и поместить все элементы списка, указанные в аргументе, и создать цикл for, такой как tab[i]->suivant_age=tab[i+1]
, но снова мы можем реализовать сортировку по возрасту.Надеюсь, я был ясен и хорошо объяснил свою проблему?