cloner une liste doublement chainée

Le
pasdespam
bonjour,

struct squareList {
int position; // de 0 a 63
struct squareList* previous;
struct squareList* next;
} squareList;

/

squareList emptiesList[62]; // 60 cases libres chainées + 2 sentinels
squareList* positionToEmpties[64]; // les 64 cases du damier, 4 cases
non affectées


/

au depart squareList est une liste doublement chainée des case libres du
damier, echiquier, othellier.

en fonction des coups des elements sont retirés de la liste.

lors d'une recherche "alphabeta" des elements sont retirés puis
reinserés (demier retiré / premier reinseré)

voila ,

j'aimerai pouvoir cloner la liste a un instant T.

je ne code rien de tres propre :-(
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Selso
Le #17605541
Salut,

Question : pourquoi faire un tableau de structure destinée à faire une
liste chainée ?

Sinon avec un tableau il te suffit de faire un memcpy() ou bien
parcourir le tableau et faire '='

Selso LIBERADO
Ingénieur en déloppement Informatique Industrielle
blog : http://selso.liberado.free.fr/wordpress

Bruno Causse a écrit :
bonjour,

struct squareList {
int position; // de 0 a 63
struct squareList* previous;
struct squareList* next;
} squareList;

.../...

squareList emptiesList[62]; // 60 cases libres chainées + 2 sentinels
squareList* positionToEmpties[64]; // les 64 cases du damier, 4 cases
non affectées


.../...

au depart squareList est une liste doublement chainée des case libres du
damier, echiquier, othellier....

en fonction des coups des elements sont retirés de la liste.

lors d'une recherche "alphabeta" des elements sont retirés puis
reinserés (demier retiré / premier reinseré)

voila ,

j'aimerai pouvoir cloner la liste a un instant T.

je ne code rien de tres propre :-(


Mickaël Wolff
Le #17606561
Selso a écrit :
Question : pourquoi faire un tableau de structure destinée à faire une
liste chainée ?



Moi aussi j'ai tiqué... et en fait je ne comprends pas ce que veux
faire Bruno... c'est pour ça que je ne suis pas intervenu.


Sinon avec un tableau il te suffit de faire un memcpy() ou bien
parcourir le tableau et faire '='



GAPS ! Maheureux ! Et ces pointeurs de liste chaînée ? Ça va manquer
de cohérence !

Selso LIBERADO
Ingénieur en déloppement Informatique Industrielle



Manque des morceaux :p

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
PasDeSpam
Le #17607411
Mickaël Wolff
Moi aussi j'ai tiqué... et en fait je ne comprends pas ce que veux
faire Bruno... c'est pour ça que je ne suis pas intervenu.




le parcour des cases libres du damiers ne se fait pas dans l'ordre (a1,
a2, a3 .... h8), mais selon l'importance strategique des cases ( a1 a8 ,
h1 , h8 .......g7) quand une case est joué elle n'est plus libre (la
palice) et donc est retirée des cases libres.

au cour d'une recherche alpha-beta le cases sont retirées et reinserées
au grès du parcour de l'arbre de recherche (cela doit etre rapide).


ce tableau (qui est trompeur),
squareList emptiesList[62]; // 60 cases libres chainées + 2 sentinels
,ne sert qu'a alouer en memoire la liste.

celui ci,
squareList* positionToEmpties[64]; // les 64 cases du damier, 4 cases
a referencer les elements de la liste en fonction de leur positions
(valeur position)

ex positionToEmpties[g4] retourne un pointeur sur l'element de la liste
chainées qui a pour valeur (position) g4 et ceci qu'il soit encore
inseré ou retiré de la liste, les pointeur previous et next conserve les
references de deux elements auquels il etait (est) lié avant d'etre
retiré de la liste.

voila en esperant etre clair.
non affectées
Pierre Maurette
Le #17607891
Bruno Causse, le 21/10/2008 a écrit :
bonjour,

struct squareList {
int position; // de 0 a 63
struct squareList* previous;
struct squareList* next;
} squareList;

.../...

squareList emptiesList[62]; // 60 cases libres chainées + 2 sentinels
squareList* positionToEmpties[64]; // les 64 cases du damier, 4 cases
non affectées


.../...

au depart squareList est une liste doublement chainée des case libres du
damier, echiquier, othellier....

en fonction des coups des elements sont retirés de la liste.

lors d'une recherche "alphabeta" des elements sont retirés puis
reinserés (demier retiré / premier reinseré)

voila ,

j'aimerai pouvoir cloner la liste a un instant T.

je ne code rien de tres propre :-(



Il me semble que vous pourriez remplacer previous et next par des
offsets dans emptiesList ou positionToEmpties, ou des indices. Et
ensuite cloner par malloc() et memcpy().


--
Pierre Maurette
pasdespam
Le #17608441
Pierre Maurette
l me semble que vous pourriez remplacer previous et next par des
offsets dans emptiesList ou positionToEmpties, ou des indices. Et
ensuite cloner par malloc() et memcpy().



eh, pas bete du tout :-)

je vais voir cela
Publicité
Poster une réponse
Anonyme