Permutation du contenu de deux structure

salero Messages postés 32 Statut Membre -  
 Utilisateur anonyme -
Bonjour,
j'ai un simple probléme!!
j'ai une structure de 4b champs et un pointeur suivan é j'ai deux pointeur qui pointe sur deux structure differente!!
s ke je peux changé les données de ces deux structure par une simple *PTr1=*Ptr2 ou doit'je copier chak donnée dan lotr equivalente ( ex ptr1->Num=ptr2->Num.....)
merci

3 réponses

Utilisateur anonyme
 
Lorsque tu fais *PTr1=*Ptr2 par exemple, tu déplaces ton pointeur PTr1 sur Ptr2.
Comme ma phrase le dit très bien, ce n'est qu'un déplacement de pointeur (et pas les données pointées).
Selon ton besoin ça peut suffir d'intervertir les 2 pointeurs mais c'est pas souvent le cas (tout dépend de ce que tu en fais).

Au passage l'interversion des pointeurs se ferait comme pour des entiers avec un pointeur temporaire (du même type)
*t = *PTr1
*PTr1 = *Ptr2
*Ptr2 = *t
0
salero Messages postés 32 Statut Membre 6
 
oui comme une variable temporaire !!c ca oui mé svp mme si on met *Ptr1=*Ptr2 on met l& de ptr2 dan ptr1!!? c le contenu avec * non
0
Utilisateur anonyme
 
Ah bin ça dépend, si c'est un simple pointeur oui en effet * est le contenu.
Si tu utilises du double pointeur, * est le contenu donc un pointeur sur ta structure, et ** le contenu du contenu, autrement dit le contenu de la structure...
0
salero Messages postés 32 Statut Membre 6
 
bon voila la structure que j'utilise
typedef struct proc
{
int Nproc;
int Prior;
int DateArr;
int TpsExe;
struct proc *Next;
}proc;


et jtravaille sur l'algo FCFS qui fai passé lé proc qui arrive le prmier (first come first serve) donc jprend ma liste chainée apré l'avoir rempli é jcrée une file d'attente trié selon le Temp d'arrivé des proc (Tps Arr)
et voila la partie qui trie la liste chainée pointé par Ptr on mettant lé element dans une autre liste pointé par PT

struct proc *Ptr,*Tmp,*Vtmp;
struct proc *PT;
struct proc *D=NULL,*F=NULL;
clrscr();
PT=(proc *)malloc(sizeof(proc));
if(PT==NULL)
printf("memoire satur‚e");
Ptr=Debut;
D=PT;
while(Ptr!=NULL)
{
Tmp=Ptr;
*PT=*Ptr;
while(Tmp!=NULL)
{
Tmp=Tmp->Next;
if(Tmp->DateArr<PT->DateArr)
{
*PT=*Tmp;
*Vtmp=*Ptr;
*Ptr=*Tmp;
*Tmp=*Vtmp;
PT++;
}
else if(Tmp->DateArr==PT->DateArr)
{
PT++;
*PT=*Tmp;
*Vtmp=*Ptr;
*Ptr=*Tmp;
*Tmp=*Vtmp;
}
}
F=PT;
F->Next=NULL;
Ptr=Ptr->Next;
}


Merci
0
Utilisateur anonyme
 
Oui donc si tu veux intervertir les contenus de tes structures, comme je l'ai dit dans ma première réponse, une simple intervertion des pointeurs ne suffit pas pour intervertir les contenus.

Mais si tu veux intervertir l'ordre de maillons dans une liste chaînée soit tu intervertis les contenus (ce qui ne pose pas de pb mais que je ne conseillerais pas), soit tu intervertis les pointeurs dans les maillons voisins.

Concrètement, si tu as les 3 maillons A, B, C suivants que tu veux trier dans l'ordre croissant de DateArr
[A : DateArr=1, Next=B]
[B : DateArr=5, Next=C]
[C : DateArr=3, Next=null]

Soit tu intervertis B et C par leur contenu
[A : DateArr=1, Next=B]
[B : DateArr=3, Next=C]
[C : DateArr=5, Next=null]

Soit tu les intervertis en jouant sur les pointeurs Next (ce que je trouve beaucoup plus propre)
[A : DateArr=1, Next=C]
[B : DateArr=5, Next=null]
[C : DateArr=3, Next=B]
0