\documentclass[10pt]{article}

% Packages
\usepackage{french}
\usepackage{fullpage}
\usepackage{multicol}
\usepackage{epsfig}
\setlength{\textheight}{24.1cm}

% Titre
\title{Partiel IF122 - Dur\'ee : 50mn}
\date{}
\author{}
\pagestyle{empty}



\begin{document}
\maketitle


{\bf Les documents sont interdits. Vous n'avez pas le droit de sortir de la salle avant la fin de l'epreuve. Votre nom doit figurer en commentaire tout au debut de votre programme, sous la forme : // NOM Prenom. Une fois le temps ecoul\'e, lancer l'impression de votre programme, et attendez sans quitter votre place que l'un des surveillant vienne le copier sur disquette. Bonne chance.}\\


Une {\bf liste circulaire} se definie presque comme une liste
chain\'ee : elle est compos\'ee d'une liste de cellules chain\'ee
entre elles, sauf que ce qui pourrait \^etre le dernier element de
cette liste a pour successeur le premier element. Voici un exemple :\\

\begin{center}\epsffile{exemple_circulaire2a.eps}\end{center}

Il \'etait facile de parcourir une liste chain\'ee, puisque sa fin
\'etait marqu\'ee par NULL. Il faudra maintenant trouver une
alternative.\\

\begin{enumerate}

\item Ecrire une proc\'edure qui affiche une liste circulaire.

\item soit une liste chain\'ee circulaire {\bf c}, \'ecrire une
fonction {\bf min} qui prend {\bf c} en argument, et qui retourne une
liste chain\'ee circulaire qui pointe sur l'un de ses plus petit
\'el\'ements.

\item Ecrire une fonction qui prend en argument une liste chain\'ee
circulaire {\bf c}, et qui supprime le segment qui va du premier
minimum au dernier minimum, bornes non comprises. Pour rester simple,
on suppose qu'il y a bien deux occurences de ce minimum, et il n'est
pas demande de le verifier.

Sur l'exemple pr\'ec\'edent on obtiendrait :

\begin{center}\epsffile{exemple_circulaire2b.eps}\end{center}

\end{enumerate}

Cet ennonc\'e est long, je suis conscient que tout ne sera
certainement pas fait, aussi les copies seront relev\'ees \`a l'heure.
Soignez la qualit\'e plus que la quanti\'e. Mettez des commentaires en
face des Pbs rencontr\'es, surtout si vous pouvez montrer que vous en
avez compris la cause.

Pour vous concentrer sur le travail demand\'e, il vous est fourni le
code suivant pour servir de base \`a votre programme : \\

\begin{multicols}{2}{|}
\begin{verbatim}
#include <iostream.h>

typedef struct elem{
  int val;
  elem * suivant;
};

typedef elem* liste;
typedef elem* liste_circ;


liste_circ saisie(int n){
  liste_circ c;
  elem *last,*aux;
  int i;
  
  if (n==0) return( NULL);

  last=new elem;
  cout << " valeur : ";
  cin >> last->val;
  
  c=last;
  
  for (i=2;i<=n;i++){
    aux=new elem;
    cout << " valeur : ";
    cin >> aux->val;
    aux->suivant=c;
    c=aux;
  }
  
  last->suivant=c;  
  return c;
  }

int main(){
  liste_circ c;
  c=saisie (8);
  affiche(c);
}
\end{verbatim}
\end{multicols}



\end{document}

