summaryrefslogtreecommitdiff
path: root/sem_2/HLIN202/TP/TP11-12/exo11.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sem_2/HLIN202/TP/TP11-12/exo11.cpp')
-rw-r--r--sem_2/HLIN202/TP/TP11-12/exo11.cpp74
1 files changed, 74 insertions, 0 deletions
diff --git a/sem_2/HLIN202/TP/TP11-12/exo11.cpp b/sem_2/HLIN202/TP/TP11-12/exo11.cpp
new file mode 100644
index 0000000..d99d75a
--- /dev/null
+++ b/sem_2/HLIN202/TP/TP11-12/exo11.cpp
@@ -0,0 +1,74 @@
+#include <iostream>
+
+struct cellule {
+ int contenu;
+ cellule *suivant;
+};
+struct file {
+ cellule *premier;
+ cellule *dernier;
+};
+
+file* init () {
+ file * ret = new file;
+ ret->premier=NULL;
+ ret->dernier=NULL;
+ return ret;
+}
+int cardinal ( file *w) {
+ int ret = 1;
+ if (w->premier == NULL ) return 0;
+ cellule * tmp = w->premier;
+ while ( tmp->suivant != NULL) {
+ tmp = tmp->suivant;
+ ret ++;
+ }
+ return ret;
+}
+bool estvide(file *w){
+ return cardinal(w)==0;
+}
+
+void ajouter(file *w, int valeur){
+ cellule * tmp = new cellule;
+ tmp->contenu = valeur;
+ tmp->suivant = w->premier;
+ w->premier = tmp;
+}
+
+int retire( file *w) {
+ int value;
+ cellule * ptr = w->premier;
+ while ( ptr->suivant->suivant != NULL) {
+ ptr = ptr->suivant;
+ }
+ value = ptr->suivant->contenu;
+ delete ptr->suivant;
+ ptr->suivant = NULL;
+ w->dernier = ptr;
+ return value;
+}
+
+void retirefile ( file * w) {
+ while ( w->premier != NULL) {
+ retire(w);
+ }
+ delete w;
+}
+
+void affichefile ( file * w ) {
+ cellule * ptr = w->premier;
+ std::cout << "\" ";
+ while ( ptr != NULL) {
+ std::cout<< ptr->contenu << " ";
+ ptr= ptr->suivant;
+ }
+ std::cout << " \""<< std::endl;
+}
+
+int main () {
+ file * ptrfile = init();
+
+ std::cout << " Taille de la file : " << cardinal(ptrfile)<< std::endl;
+ return 0;
+}