summaryrefslogtreecommitdiff
path: root/sem_2/HLIN202/TP/TP11-12/exo11.cpp
blob: d99d75a69c8bf40c9afb58c837b1139d38749ebd (plain)
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
#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;
}