1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
| #include<stdio.h>
#include<stdlib.h>
typedef struct Noeud{
int x;
int y;
struct Noeud *voisin;
struct Noeud *suivant;
}noeud;
noeud *premier, *dernier;
//sert à la creation d'un nouveau neoud.
noeud *creernoeud(void)
{
noeud *p;
p = (noeud*)malloc(sizeof(noeud));
p->voisin = (noeud*)malloc(sizeof(noeud));
if(p==NULL) puts("Memoire insufisante"), exit(1);
return p;
}
//sert à initialiser la liste
void initlist(void)
{
premier = dernier = creernoeud();
}
//permet l'insertion d'un nouvelle element
void inserer( int x, int y, int vx, int vy)
{
noeud *p = premier;//element qui sert de parcours à la liste.
//initialisation de dernier qui sert de sentinelle lors de parcours.
dernier->x = x;
dernier->y = y;
dernier->voisin->x = vx;
dernier->voisin->y = vy;
while((p->x < x) || ((p->x == x) && (p->y < y)))//cherche le bon emplacement pour le nouvelle element.
{
p = p->suivant;
}
noeud *q = creernoeud();//On crée une structure pour copie l'element que l'on veut deplacer pour inserer le nouveau.
if(p == dernier)
{
dernier = q;
dernier->voisin = q->voisin;
}
else
{
*q = *p;
}
//initialisation du nouvelle element
p->x = x;
p->y = y;
p->voisin->x = vx;
p->voisin->y = vy;
//p->suivant est l'element deplacer pour inserer le nouvelle element.
p->suivant = q;
}
//On affiche la liste.
void afficher_liste(void)
{
noeud *p;
for(p = premier; p!=dernier; p = p->suivant)
{
printf("p->x:%3d p->y:%3d p->voisin->x:%3d p->voisin->y:%3d\n", p->x, p->y, p->voisin->x, p->voisin->y);
}
}
main()
{
int x, y;
int vx, vy;
noeud *p = creernoeud();
initlist();
puts("Saisir une serie d'entier suivant suivant d'un caractère non numérique: ");
while(1)
{
//Saisie pour initialisation des champs pour le nouvel element à initialiser.
puts("Saisir les coordonnee du pivot: ");
scanf("%d", &x);
scanf("%d", &y);
puts("Saisir les coordonnee du voisin: ");
scanf("%d", &vx);
scanf("%d", &vy);
//appel fonction pour l'insertion d'un nouvelle element.
inserer(x, y, vx, vy);
puts("liste par ordre croissant des entiers saisis:\n");
afficher_liste();
}
return 0;
} |
Partager