Как скопировать связанный список дважды отсортированный в C - PullRequest
0 голосов
/ 18 октября 2018

я определил список, используя:

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], но снова мы можем реализовать сортировку по возрасту.Надеюсь, я был ясен и хорошо объяснил свою проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...