#include "stdio.h"
#include "malloc.h"

/* Le type Liste Simplement Chaînée (LSC) */ 
typedef int objet;
typedef struct elt {
    objet info;
    struct elt *suiv;
} ELT, *LSC;

/*************/
/* Exercice3 */
/*************/

int alterne(LSC l) {
  int croissant, alterne;
  LSC p, c;
  if (l == NULL) /* liste vide => alternée */
    return 1;
  else {
    p = l;
    c = l->suiv;
    if (c == NULL) /* liste d'1 seul elt => alternée */
      return 1;
    else { /* au moins 2 elts dans la liste */
      alterne = 1;
      croissant = p->info < c->info;
      p = c; c = c->suiv;
      while (alterne && c != NULL)
	if (croissant)
	  if (p->info <= c->info)
	    alterne = 0;
	  else {
	    croissant = 0;
	    p = c;
	    c = c->suiv;
	  }
	else	/* décroissant */
	  if (p->info >= c->info)
	    alterne = 0;
	  else {
	    croissant = 1;
	    p = c;
	    c = c->suiv;
	  }
    }
    return alterne;
  }
}

/*
 *  Fonctions non demandées. Données ici pour tester le reste.
 */

/* Construction d'une liste simpelemnt chaîné */

LSC construire() {
    LSC p, L = NULL;
    objet x;
    scanf("%d", &x);
    while (x) {
	p = (LSC) malloc(sizeof(ELT));
	p->info = x; p->suiv = L;
	L = p;
	scanf("%d", &x);
    }
    return L;
}

/* Affichage d'une liste simpelemnt chaîné */

void afficher(LSC L) {
  while (L) {
    printf("%d ", L->info);
    L = L->suiv;
  }
  putchar('\n');
}

int main() {
  LSC L = construire();
  printf("Liste construite : "); afficher(L);
  (alterne(L)) ? printf("La liste est alternée\n") : printf("La liste n'est pas alternée\n");
}


